---
title: "Oauth Connected Clients"
method: GET
path: "/oauth/connected-clients"
---

# Oauth Connected Clients

`GET /oauth/connected-clients`

## 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/oauth/connected-clients`
- Auth: none declared

The tray polls this with its cloud_token to learn which cloud AI clients
(ChatGPT, Claude.ai, …) actually have an ACTIVE connector for THIS machine — i.e.
a non-expired OAuth refresh token issued to that client for this token. Lets the
menu bar show real connection status ('Connected' only when a grant exists) instead
of inferring it from 'the app is installed' or 'the relay is up' (both false-positives).
Authenticated by the cloud_token itself — the same credential the relay uses.
Cached per token for a few seconds (see _CONNECTED_CLIENTS_TTL) — the poll rate would
otherwise saturate the API.

Response (no published contract; shipped trays ignore unknown fields): `clients[]` each carry
`stale_token` (bool), and the top level carries it too. True = the machine's live tunnel is on
ANOTHER token (reinstall), so these grants cannot work: the tray may offer "Reconnect this AI".

## Query parameters

- `token` 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)
