Plugin HTTP/OAuth MCP (e.g. Linear) with a valid stored token does not connect on session cold-start — only /reload-plugins (no re-auth) brings it up

Open 💬 0 comments Opened Jun 25, 2026 by Ganim

Summary

A plugin-provided HTTP/OAuth MCP server with a valid, already-persisted OAuth token is not connected on a fresh session cold start — it is simply absent from /mcp (not even listed as failed). Running /reload-plugins connects it immediately, using the stored token, with no browser/re-auth. So the credentials are valid and reusable; the cold-start auto-connect for type: "http" OAuth MCPs just never (successfully) happens.

Concrete case: the official Linear plugin linear@claude-plugins-official, whose .mcp.json is:

{ "type": "http", "url": "https://mcp.linear.app/mcp" }

This is distinct from existing (closed) issues:

  • #10250 / #56208 — post-OAuth same-session reconnect failure (there, a restart loads the token fine; here, the restart/cold-start is exactly what fails).
  • #40582 — tokens not persisted / require re-auth (here the token is persisted and no re-auth is needed).

The gap here is purely cold-start auto-connect of HTTP/OAuth MCP servers when a valid token already exists on disk.

Repro

  1. Enable the official Linear plugin (linear@claude-plugins-official) and authenticate once via /mcp → linear → Authenticate. The OAuth token is written to <config>/.credentials.json (entry for mcp.linear.app).
  2. Fully quit and start a new Claude Code session.
  3. Run /mcp. → Only non-type:http-OAuth servers appear. In our setup: plugin:playwright:playwright (stdio) and plugin:sentry:sentry (via mcp-remote) both show connected. Linear is absent entirely — not listed as connected, reconnecting, or failed.
  4. Run /reload-plugins. → Linear connects instantly, no browser, no re-auth, tools available.

Expected

On cold start, a plugin HTTP/OAuth MCP with a valid stored token should auto-connect (or at minimum appear in /mcp as reconnecting/failed) the same way mcp-remote-based OAuth servers do — without requiring a manual /reload-plugins.

Notes / contrast

  • mcp-remote-based OAuth servers (e.g. Sentry: npx -y mcp-remote@latest https://mcp.sentry.dev/mcp, token cached in ~/.mcp-auth) do reconnect reliably on cold start. The built-in type: "http" OAuth path does not.
  • This forces a manual /reload-plugins on every new terminal. It's especially painful when launching many terminals at once — we run 6–12 Claude Code terminals in parallel for a multi-agent / orchestrator workflow, and each one starts with Linear missing until reloaded. Current workaround: auto-send /reload-plugins as the initial prompt of every terminal (claude '/reload-plugins').

Environment

  • Claude Code v2.1.191, Opus 4.8 (1M context)
  • Windows 11
  • Custom config dir via CLAUDE_CONFIG_DIR; credentials at <config>/.credentials.json
  • Affected server: linear@claude-plugins-officialtype: "http", https://mcp.linear.app/mcp
  • Unaffected (for contrast): sentry via mcp-remote (reconnects on cold start), playwright (stdio, no auth)

View original on GitHub ↗