---
title: "Runtime Tray Stale"
method: GET
path: "/runtime/tray-stale"
---

# Runtime Tray Stale

`GET /runtime/tray-stale`

## Request

- Base URL: `https://api.local-mcp.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.local-mcp.com/runtime/tray-stale`
- Auth: none declared

Tells a freshly-started stdio proxy (npx local-mcp@latest) whether the tray
serving THIS machine is running OLDER code than the bundle staged on disk — the
disk-vs-running lag (~half the fleet, 2026-06-13). The tray's own idle self-heal
(applyDeferredTrayRestartIfIdle) only ships in 3.0.278+ and only runs once the tray
is ALREADY executing 278+ code, so it can't unstick the pre-278 always-on tail. The
proxy is the only always-fresh code on a stuck machine; it calls this and, if stale,
restarts the tray.

Authoritative signal: the latest heartbeat's running_version (compile-time VERSION =
the code actually executing) vs version (disk bundle). ServerCore.version is read
from the on-disk Info.plist, so /status/IPC/lmcp_state all report the DISK version —
only the heartbeat exposes the true running version. Strict numeric older => stale.
Read-only; machine_id is a UUID the caller already owns (no PII, no auth needed).

## Query parameters

- `machine_id` string

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/local-mcp/apis/lmcp-api.md) · [All operations](https://skmtc.dev/local-mcp/apis/lmcp-api/llms.txt) · [OpenAPI document](https://skmtc.dev/local-mcp/apis/lmcp-api/revisions/f1f1c502623a?raw)
