tools/call it dispatches.
Each server’s auth is encrypted at rest and masked on read, so the
plaintext token never round-trips back to your console, your agents, or the
model. Rotation is a one-field update through the workspace console.
1. Why MCP secret rotation is its own action
A registered MCP server holds three things you don’t want to lose when a credential changes: a unique workspacename (the <server>.<tool>
namespace your rules glob against), an endpoint, and its discovered tool
set. Deleting and re-creating the server to change a token would orphan
every rule scoped to <server>.* and force a fresh probe.
Rotation sidesteps all of that. You PUT the same server record with new
auth_json; everything else — name, rules, discovered tools — stays put.
The gateway injects credentials at dispatch time, decrypting them only
to make the upstream call. A rotated secret takes effect on the next
connection — OrcaRouter invalidates the per-workspace tool cache on every
server change, so there’s no TTL to wait out.
2. One concrete rotation
Say you registered an MCP server namedgithub with a bearer token, and
that token needs to roll. Read the current record first — the response
masks the secret, so you’re never handling the old plaintext:
PUT the same record with only the new credential. Send the
id in the body and the fresh auth_json; the gateway re-encrypts it
before it touches the database:
name, endpoint, auth_mode, and
enabled all keep their stored values. The new token is live on the next
tools/call.
3. Changing auth mode, not just the secret
Rotation also covers moving a server between auth schemes. The closed set ofauth_mode values is:
none
none
No credential.
auth_json is empty. Use for public or
network-trusted MCP servers.bearer
bearer
{ "token": "…" } — sent as an Authorization: Bearer header.oauth
oauth
{ "client_id": "…", "client_secret": "…", "token_url": "…" }. If you
store a static access_token in the JSON, the gateway sends it as a
bearer token; the client-credentials exchange itself is not run yet, so
a server that needs a live exchange will fail until you supply a token.basic
basic
{ "username": "…", "password": "…" } — HTTP basic auth.4. After you rotate: re-probe
A rotated credential changes which tools you can reach if the old token had been revoked. Probe the server to confirm the new auth works and refresh its reachabilitystatus:
ok, degraded, or down. An auth failure surfaces here rather
than as a confusing tool error mid-run.
5. Roles and what stays masked
Every action on this page is a workspace-scoped console call (/api/workspace/firewall/mcp_servers, UserAuth) and is role-gated:
| Action | Minimum role |
|---|---|
| Read a server (secret masked) | Member |
| Rotate / update / register | Developer+ |
| Delete | Developer+ |
Plaintext is never returned to your console. Reads mask the secret and
redact the endpoint; the gateway is the only thing that decrypts a
credential, and only at the moment it dials the upstream server. The model
and your agents see neither the old nor the new token.
6. Where this fits
Rotation is one operation in the broader MCP trust surface. Once your servers are connected and authenticated, the same gateway evaluates everytools/call against your firewall policy before it
runs, applies skill quarantine on top, and
governs outbound reach.
Connect a server
Register an MCP server and probe its tools.
Authenticate
Pick the right auth mode for each server.
Allow-list MCP tools
Scope which tools each server may expose.
Egress limits
Govern where tool calls may reach.
FAQ
Do I have to re-write my firewall rules after rotating?
Do I have to re-write my firewall rules after rotating?
No. Rotation changes only the credential. The server keeps its
name,
so every rule scoped to <server>.* — and any
allow-list — stays attached.Will in-flight agents break when I rotate?
Will in-flight agents break when I rotate?
The new secret is injected on the next dispatched
tools/call. There’s
no cache TTL to wait out — OrcaRouter invalidates the workspace tool
cache on every server change.Can I see the old token to confirm what I'm replacing?
Can I see the old token to confirm what I'm replacing?
No — and that’s the point. Reads return a masked secret; the plaintext
is only ever decrypted by the gateway at dispatch. Rotate by sending a
new value, then probe to confirm it works.
