Settings → MCP panel #153

Open
opened 2026-09-15 18:24:05 +02:00 by lz · 0 comments
Owner

The operator's setup surface for MCP, sitting beside Tokens in /settings. Mocked and approved — artboard A.

Depends on #151 and #152.

Contents

MCP server — enable toggle, and the connector URL to paste into Claude → Settings → Connectors → Add custom connector, with a copy button.

The URL is derived from public_url. RFC 9728's resource must equal the URL typed into Claude exactly, including the path, so the panel shows the precise string rather than leaving the operator to assemble it. If public_url is unset, say so here rather than emitting a metadata document with a wrong resource — that fails at connection time with no useful symptom.

Authorization — a segmented control: Built into Nexus / External OIDC provider, plus the issuer and the two metadata routes with reachability chips.

This control is the pluggable seam made visible. One setting drives both the authorization_servers value in the metadata document and which token verifier is active, so the two can never disagree — the failure mode where Nexus advertises one issuer and trusts another is unrepresentable rather than merely tested for.

Client registration — the CIMD allowlist with add/remove and a reachability chip per entry, and the DCR toggle marked deprecated by the MCP spec.

Connected clients — name, whether CIMD-verified, granted scopes, last used, revoke. Revoking drops the refresh token; the next request re-prompts for consent.

Conventions

Follow TokensPanel.svelte — it is the existing credentials panel and the nearest analogue. Reuse .card, .field, .chip, .btn from app.css; no new component vocabulary.

Per AGENTS.md: the server owns the legal values, the client owns how they read — option labels live in the panel, not in the settings registry. If the authorization-server choice becomes an enum setting, give its SettingDef an options array and let SettingField.svelte render it, rather than hand-writing a third enum control.

UI terminology is "Workspace" / "Session"; keep worker identifiers in code.

Done when

An operator can go from a fresh instance to a working Claude connector using only this panel and Claude's own UI, without editing a config file or reading the spec.

The operator's setup surface for MCP, sitting beside Tokens in `/settings`. Mocked and approved — artboard A. Depends on #151 and #152. ## Contents **MCP server** — enable toggle, and the **connector URL** to paste into Claude → Settings → Connectors → Add custom connector, with a copy button. The URL is derived from `public_url`. RFC 9728's `resource` must equal the URL typed into Claude **exactly**, including the path, so the panel shows the precise string rather than leaving the operator to assemble it. If `public_url` is unset, say so here rather than emitting a metadata document with a wrong `resource` — that fails at connection time with no useful symptom. **Authorization** — a segmented control: *Built into Nexus* / *External OIDC provider*, plus the issuer and the two metadata routes with reachability chips. This control **is the pluggable seam made visible.** One setting drives both the `authorization_servers` value in the metadata document and which token verifier is active, so the two can never disagree — the failure mode where Nexus advertises one issuer and trusts another is unrepresentable rather than merely tested for. **Client registration** — the CIMD allowlist with add/remove and a reachability chip per entry, and the DCR toggle marked deprecated by the MCP spec. **Connected clients** — name, whether CIMD-verified, granted scopes, last used, revoke. Revoking drops the refresh token; the next request re-prompts for consent. ## Conventions Follow `TokensPanel.svelte` — it is the existing credentials panel and the nearest analogue. Reuse `.card`, `.field`, `.chip`, `.btn` from `app.css`; no new component vocabulary. Per AGENTS.md: the server owns the legal values, the client owns how they read — option **labels** live in the panel, not in the settings registry. If the authorization-server choice becomes an enum setting, give its `SettingDef` an `options` array and let `SettingField.svelte` render it, rather than hand-writing a third enum control. UI terminology is "Workspace" / "Session"; keep `worker` identifiers in code. ## Done when An operator can go from a fresh instance to a working Claude connector using only this panel and Claude's own UI, without editing a config file or reading the spec.
lz added this to the MCP support (#140) milestone 2026-09-15 18:24:05 +02:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lz/agent-nexus#153
No description provided.