Custom MCP connector marked "session expired" after its host was briefly offline: no retry, no error shown, attached routines stop
Status Open
Reported on v2.1.293
Maintainer reply None cached
Activity 0 comments · opened Oct 8, 2026
Summary
A custom MCP connector I run myself (HTTPS, OAuth with dynamic client registration, 1-hour access tokens, non-expiring refresh tokens) is now shown on claude.ai as "Connection issue — Your session has expired. You can reconnect to re-authorize." The server was reachable and healthy the whole time except for about 16 hours when the Mac hosting it was offline. Nothing in Claude's UI says what failed, and the two cloud routines I attached to the connector cannot run until I re-authorize by hand.
Setup
- Custom connector added at claude.ai > Customize > Connectors (personal Max account), pointing at a server on my Mac published through Tailscale Funnel.
- OAuth: dynamic client registration, PKCE, 1-hour access tokens, refresh tokens that never expire on my side. The data endpoints accept calls only from Anthropic's published outbound range (160.79.104.0/21).
- Claude Code 2.1.293 on macOS 27.0; the connector is also attached to Claude Code cloud routines.
What happened
- 2026-10-04 07:45 UTC: authorized from the Claude iOS app. Tool calls (list, read, search, edit) worked from a phone chat the same morning; last successful call 08:35 UTC.
- 2026-10-04 ~19:40 UTC to 2026-10-05 12:12 UTC: the Mac was offline (travel). The server came back by itself.
- 2026-10-08: the connector page shows "Your session has expired" and the routines that use it stay unusable. My server's request log shows no sign-in, tool call or refused request from Claude's range between 2026-10-04 09:34 UTC and 2026-10-08 14:26 UTC. (Refresh attempts were not logged until today, so I cannot say whether Claude tried to refresh while the Mac was offline.)
- Tapping Reconnect starts a brand-new OAuth registration and authorization (three new client registrations in four minutes), not a token refresh.
What I would expect
- If a refresh fails because the server is unreachable, retry later instead of marking the connection expired for good. A self-hosted connector on a laptop will be offline sometimes.
- Show the actual failure on the connector page (HTTP status, "server unreachable", "invalid_grant"), so the person who runs the server can tell whose problem it is.
- If the refresh token is still valid on the server, Reconnect should try it before forcing a full re-authorization.
Why it matters
I built this connector so Claude on my phone could read and edit my own notes. One unexplained "session expired" turns an always-on setup into a weekly chore, and every cloud routine that depends on the connector silently stops.