You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/api/rest-api.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -852,7 +852,7 @@ Get application info, version, and update availability.
852
852
|`listen_addr`| string | Server listen address |
853
853
|`endpoints.http`| string | HTTP API endpoint address |
854
854
|`endpoints.socket`| string | Unix socket path (empty if disabled) |
855
-
|`update`| object | Update information (may be null if not checked yet) |
855
+
|`update`| object | Update information (may be null if not checked yet; omitted entirely when update checking is disabled via `update_check.enabled: false` or `MCPPROXY_DISABLE_AUTO_UPDATE=true`) |
856
856
|`update.available`| boolean | Whether a newer version is available |
857
857
|`update.latest_version`| string | Latest version available on GitHub |
858
858
|`update.release_url`| string | URL to the GitHub release page |
@@ -861,7 +861,7 @@ Get application info, version, and update availability.
861
861
|`update.check_error`| string | Error message if update check failed |
862
862
863
863
:::tip Update Checking
864
-
MCPProxy automatically checks for updates every 4 hours. The update information is exposed via this endpoint and used by the tray application and web UI to show update notifications.
864
+
MCPProxy automatically checks for updates every 4 hours. The update information is exposed via this endpoint and used by the tray application and web UI to show update notifications. Use `?refresh=true` to force an immediate re-check. Checking is controlled by the `update_check` config block (`enabled`, `channel`) — see [Version Updates](/features/version-updates); when disabled, `?refresh=true` performs no check and the `update` object is omitted.
-**Check failed or not yet completed** (offline, rate-limited): the version is shown without any annotation. In JSON output the `update.check_error` field retains the failure reason for diagnostics.
154
+
-**Update checking disabled** (`update_check.enabled: false` in the config, or `MCPPROXY_DISABLE_AUTO_UPDATE=true`): the daemon performs no check and omits the `update` object entirely, so the version is shown without any annotation.
154
155
155
156
In machine-readable output (`-o json`/`-o yaml`) the `update` object also carries `checked_at` (when the last successful check ran, so consumers can judge staleness) and `is_prerelease` (whether the offered version is a prerelease), matching the `/api/v1/info` contract.
Copy file name to clipboardExpand all lines: docs/configuration.md
+45-1Lines changed: 45 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,7 +17,8 @@ Complete reference for MCPProxy configuration file (`mcp_config.json`). This doc
17
17
11.[Code Execution](#code-execution)
18
18
12.[Feature Flags](#feature-flags)
19
19
13.[Registries](#registries)
20
-
14.[Complete Example](#complete-example)
20
+
14.[Update Check](#update-check)
21
+
15.[Complete Example](#complete-example)
21
22
22
23
---
23
24
@@ -1033,6 +1034,49 @@ and are hot-reloadable. Non-positive values fall back to the defaults.
1033
1034
1034
1035
---
1035
1036
1037
+
## Update Check
1038
+
1039
+
Controls the background upgrade-awareness checker (Spec 079). MCPProxy
1040
+
periodically queries GitHub Releases and surfaces "update available" on
1041
+
`mcpproxy status` / `doctor`, a startup log line, the Web UI (sidebar badge +
1042
+
dismissible banner), and the trays. Checks never block and fail silently when
1043
+
offline.
1044
+
1045
+
```json
1046
+
{
1047
+
"update_check": {
1048
+
"enabled": true,
1049
+
"channel": "stable"
1050
+
}
1051
+
}
1052
+
```
1053
+
1054
+
| Field | Type | Default | Description |
1055
+
|-------|------|---------|-------------|
1056
+
|`enabled`| boolean |`true`| Master switch for update checking. When `false`, no network check is performed (background poll *and* the manual `/api/v1/info?refresh=true` re-check) and no upgrade nudge appears on any surface — the `update` object is omitted from `/api/v1/info`. |
1057
+
|`channel`| string |`"stable"`| Release channel: `"stable"` (GitHub `releases/latest`; prereleases never offered) or `"rc"` (prerelease tags such as `v0.47.0-rc.1` included). |
1058
+
1059
+
Both keys are optional and hot-reloadable: editing them (config file or
1060
+
`POST /api/v1/config/apply`) takes effect without a restart, and re-enabling
1061
+
triggers a prompt re-check.
1062
+
1063
+
**Environment-variable precedence** — the existing switches keep working and
1064
+
**win over** the config keys (operator override):
1065
+
1066
+
| Variable | Effect |
1067
+
|----------|--------|
1068
+
|`MCPPROXY_DISABLE_AUTO_UPDATE=true`| Force-disables update checking even when `update_check.enabled` is `true`. |
1069
+
|`MCPPROXY_ALLOW_PRERELEASE_UPDATES=true`| Force-selects the prerelease (`rc`) channel even when `update_check.channel` is `stable`. |
1070
+
1071
+
The env vars only widen in one direction (disable checks / enable
1072
+
prereleases); they cannot force-enable checking that config disabled — with
1073
+
`update_check.enabled: false`, checks stay off regardless of environment.
1074
+
1075
+
See [Version Updates](features/version-updates.md) for where updates are
1076
+
surfaced.
1077
+
1078
+
---
1079
+
1036
1080
## Complete Example
1037
1081
1038
1082
Here's a complete configuration example with all major sections:
Copy file name to clipboardExpand all lines: docs/configuration/config-file.md
+21Lines changed: 21 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -38,6 +38,10 @@ MCPProxy uses a JSON configuration file located at `~/.mcpproxy/mcp_config.json`
38
38
"features": {
39
39
"enable_web_ui": true
40
40
},
41
+
"update_check": {
42
+
"enabled": true,
43
+
"channel": "stable"
44
+
},
41
45
"mcpServers": []
42
46
}
43
47
```
@@ -112,6 +116,23 @@ Both cadences are configurable globally, and can be overridden per server (see [
112
116
|`code_execution_max_tool_calls`| integer |`0`| Maximum tool calls (0 = unlimited) |
113
117
|`code_execution_pool_size`| integer |`10`| VM pool size for code execution |
114
118
119
+
### Update Check Settings
120
+
121
+
Controls the background upgrade-awareness checker. Both keys are optional and
122
+
hot-reloadable (no restart needed).
123
+
124
+
| Option | Type | Default | Description |
125
+
|--------|------|---------|-------------|
126
+
|`update_check.enabled`| boolean |`true`| Master switch. When `false`, no network check runs (background poll and manual re-check) and no upgrade nudge appears on any surface — the `update` object is omitted from `/api/v1/info`. |
127
+
|`update_check.channel`| string |`"stable"`| Release channel: `"stable"` (prereleases never offered) or `"rc"` (prerelease tags like `v0.47.0-rc.1` included). |
128
+
129
+
The existing environment switches keep working and **win over** these keys:
130
+
`MCPPROXY_DISABLE_AUTO_UPDATE=true` force-disables checking, and
131
+
`MCPPROXY_ALLOW_PRERELEASE_UPDATES=true` force-selects the prerelease channel.
132
+
They only widen in one direction — they cannot re-enable checking that the
133
+
config disabled. See [Version Updates](/features/version-updates) for where
134
+
updates are surfaced.
135
+
115
136
### MCP Servers
116
137
117
138
See [Upstream Servers](/configuration/upstream-servers) for detailed server configuration.
Update checking is controlled from `mcp_config.json` via the `update_check`
67
+
block:
68
+
69
+
```json
70
+
{
71
+
"update_check": {
72
+
"enabled": true,
73
+
"channel": "stable"
74
+
}
75
+
}
76
+
```
77
+
78
+
| Option | Type | Default | Description |
79
+
|--------|------|---------|-------------|
80
+
|`enabled`| boolean |`true`| Master switch. When `false`, no network check is performed (background poll and the manual re-check) and no upgrade nudge appears on any surface — the `update` object is omitted from `/api/v1/info`. |
81
+
|`channel`| string |`"stable"`| Release channel: `"stable"` (GitHub `releases/latest`; prereleases never offered) or `"rc"` (prerelease tags such as `v0.47.0-rc.1` included). |
82
+
83
+
Both keys are **hot-reloadable**: editing the config file or applying it via
84
+
`POST /api/v1/config/apply` takes effect without a restart. Re-enabling (or
85
+
switching channels) triggers a prompt re-check instead of waiting for the next
86
+
4-hour tick.
87
+
88
+
`enabled: false` also gates the Go tray's built-in daily self-update check, so
89
+
no surface performs a network check while disabled. The tray does **not** read
90
+
`mcp_config.json` itself (it holds no state); instead it asks the core via
91
+
`GET /api/v1/info` before checking — the core omits the `update` object when
92
+
update checking is disabled, and the tray then skips its own network check. If
93
+
the core is unreachable the tray skips that tick and retries, rather than
94
+
falling open to a check the operator may have disabled. The tray's own check
95
+
still selects prereleases via `MCPPROXY_ALLOW_PRERELEASE_UPDATES` only —
96
+
converging it fully onto the shared checker (including `channel`) is a separate
Copy file name to clipboardExpand all lines: docs/prerelease-builds.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -69,7 +69,7 @@ The GitHub release is created with `prerelease: true`, so it does **not** become
69
69
- Does not deploy docs or trigger marketing automation (`deploy-docs`, `trigger-marketing-update` guarded).
70
70
- Not offered as an update on **stable channels**:
71
71
- The macOS tray uses GitHub `releases/latest`, which excludes prereleases (`native/macos/MCPProxy/MCPProxy/Services/UpdateService.swift`), plus a semver downgrade guard so an `-rc` is never treated as "newer" than the matching stable.
72
-
- The backend/tray update check is stable-only by default (`internal/tray/tray.go` → `releases/latest`). Set `MCPPROXY_ALLOW_PRERELEASE_UPDATES=true` to opt in to RC update offers.
72
+
- The backend/tray update check is stable-only by default (`internal/tray/tray.go` → `releases/latest`). Set `MCPPROXY_ALLOW_PRERELEASE_UPDATES=true` to opt in to RC update offers; the core checker can also opt in via `"update_check": { "channel": "rc" }` in `mcp_config.json` (Spec 079 — the Go tray's own self-update check gates on the core's decision by querying `GET /api/v1/info` rather than reading the config file, and selects prereleases via `MCPPROXY_ALLOW_PRERELEASE_UPDATES`; converging it fully onto the shared checker is FR-001a).
0 commit comments