Back to Mcpproxy Go

Server Detail Page

docs/web-ui/server-detail.md

0.38.15.0 KB
Original Source

Server Detail Page

The Server Detail page (URL: /ui/servers/<name>) is where you inspect and edit a single upstream server. It opens from the Servers list or via the macOS tray's per-server submenu.

The page has four tabs: Tools, Logs, Configuration, and Security. This page covers the Configuration tab — for the others, see the Dashboard and Activity Log pages.

Configuration tab

The Configuration tab is a read-and-edit view of the server's mcp_config.json entry. It uses dedicated cards for each block — General, Connection, Headers, Environment Variables, Docker Isolation, Status, Health.

This page focuses on the two cards introduced with the per-key editing feature: Headers (HTTP / streamable-http servers) and Environment Variables (stdio servers). They share an identical visual language and the same set of affordances.

Headers card

Each header row shows:

ColumnWhat it is
KeyThe header name (e.g. Authorization)
ValueEither a masked literal (••••<last2> (<N> chars)), a ${keyring:NAME} chip, or a ${env:VAR} chip
Actions🔒 Convert to secret · ✎ Edit · ✕ Delete (variable set per row type)

Value formats

  • Masked literal••••59 (71 chars) — what you see for sensitive headers (Authorization, X-API-Key, Cookie, etc.) when reveal_secret_headers is off (the default). The full secret is stored in mcp_config.json on disk; the mask is only how the API presents it.
  • ${keyring:NAME} chip — the value is a reference to an OS keyring entry. The chip shows the keyring name so you can find the underlying secret on the Secrets page.
  • ${env:VAR} chip — similar, but resolved from the mcpproxy process's environment.
  • Plain string — non-sensitive headers (e.g. X-Trace: on) show their literal value.

Add a header

Click + Add header at the top right of the card. Two inputs appear (name + value). Hit Enter or click Add to commit. The new header is upserted via a JSON Merge Patch and the row appears immediately.

Edit a header

Click the pencil icon next to a row. The value cell turns into a text input. Save (or Cancel) the change. The PATCH only sends this one key, so every other header stays exactly as it was — including the real plaintext behind any masked rows.

Delete a header

Click the ✕ icon and confirm. The header is deleted with a JSON Merge Patch that sets the key to null:

http
PATCH /api/v1/servers/synapbus
Content-Type: application/json

{"headers": {"X-Stale": null}}

Other keys are preserved.

Convert a header value to an OS keyring secret

This is the safe way to take a Bearer token out of your config file. Click the 🔒 icon next to a literal value to open the modal:

The modal asks for a secret name (pre-suggested as <server>-<key>, all lowercase and hyphen-sanitised) and previews the final reference. Hit Convert:

  1. The backend reads the real plaintext value from mcp_config.json.
  2. Stores it in the OS keyring under the name you chose.
  3. Rewrites the header field with ${keyring:<name>}.

All atomic — either the whole operation succeeds or nothing changes. The row immediately transforms from a masked literal into a keyring chip.

Why this matters: the Web UI never has to see or transmit the plaintext. The browser doesn't even need to be able to read the masked value — the backend has it. This is what makes the affordance work for sensitive headers the API redacts.

The same flow exists in the macOS tray's Edit dialog.

Environment Variables card

For stdio servers, the Environment Variables card behaves identically to Headers. Same row shape, same actions, same Convert-to-secret modal. Stdio env values aren't redacted on the wire today (only HTTP headers are) so masked rows are computed client-side, but the affordances are the same.

A common pattern is to start a stdio server with an OPENAI_API_KEY=<paste> literal during onboarding, then click Convert to secret to move it into keyring once you're sure the server works.

Behind the scenes

The Configuration tab is read-only against GET /api/v1/servers and writes back via PATCH /api/v1/servers/{name}. Every per-row action is a minimal JSON Merge Patch. The flow is documented in detail in the REST API › PATCH section and in Upstream Servers › Headers, Environment Variables, and Secrets.

The same operations are available from the CLI — see Management Commands › Patch Headers / Env — and from the macOS tray's Server Detail dialog.