tools/call through your
firewall policy before it reaches the real server.
This page covers that one task — connecting and configuring a server
record. For the gateway’s runtime behavior and per-call verdicts, see the
MCP reference; for the bigger picture, start at
the MCP security overview.
Registration is a console action (the
/api/workspace/firewall/*
routes authenticate with your session / access token, not a relay
sk-orca-… key). Writes require the Developer+ role; any member can
list servers.1. How to connect an MCP server
Open Firewall → MCP Servers in the console and add a server, or call the workspace API directly. A registration carries four things that matter:name
Unique per workspace. It becomes the
<server>.<tool> namespace
prefix, so a duplicate name in the same workspace is rejected with
HTTP 409.endpoint
Your remote MCP server’s URL. Leave it empty to register the
bundled in-process server so it’s visible and governable.
auth_mode
How the gateway authenticates to your server:
none, bearer,
oauth, or basic.credentials
The mode-specific secret. Stored encrypted at rest and masked on
read — it never reaches the model or the client.
enabled and is dropped from the gateway entirely the
moment you disable it — that’s the off switch, and a disabled server’s
credentials are never decrypted.
2. One concrete example
Register a remote GitHub MCP server with a bearer token. This is a console-equivalent REST call; the field names are exactly what the form writes.auth_mode:
bearer
bearer
{"token":"…"} — sent as a bearer token to your server.oauth
oauth
{"access_token":"…"} — a static access token the gateway sends as a
bearer header. Automatic client-credentials exchange is not yet
supported; without a stored access_token, an oauth-mode probe fails
rather than connecting unauthenticated.basic
basic
{"username":"…","password":"…"}.none
none
An empty string. No credentials are attached.
3. Probe its health
Before you can write firewall rules against a server’s tools, you need to know they’re reachable and what they’re called. Probe the server — the gateway runs an MCPinitialize + tools/list handshake using the
decrypted credentials, records reachability, and returns the advertised
tools:
status lands in the server record and drives the health indicator:
| status | Meaning |
|---|---|
ok | Reachable; tools are served by the gateway. |
degraded | Reachable, but the handshake was partial. |
down | Unreachable on the last probe; the server is skipped. |
down server is left out when the gateway builds its tool set, so a
transient outage degrades gracefully instead of breaking dispatch. A probe
returns its result regardless of outcome — a failed probe comes back as
200 with status: down and a scrubbed reason, not a transport error.
Every registration change invalidates the gateway’s per-workspace tool
cache immediately, so a newly connected, disabled, or re-probed server
takes effect on the next connection rather than after a cache window.
4. After it’s connected
Once a server is registered and probingok, its tools are governed:
- Every call is evaluated. Each
tools/callruns through your firewall policy on themcpsurface before it reaches your server. Scope rules bytool_name_glob: github.*now that you know the tool names. - Lock the surface down. Default to denying tools you didn’t explicitly allow — see allow-list MCP tools.
- Govern where it reaches. Author an egress rule so a tool can’t fetch arbitrary hosts.
- Watch for changes. A server you trusted can change its tool definitions after the fact; the rug-pull defense flags that drift.
5. API reference
All console routes are workspace-scoped and authenticate with your session / access token. List reads are open to any Member (secrets masked); every write requires Developer+.| Method & path | Role | Purpose |
|---|---|---|
GET /api/workspace/firewall/mcp_servers | Member | List servers (secrets + endpoint masked). |
GET /api/workspace/firewall/mcp_servers/:id | Member | One server, masked. |
POST /api/workspace/firewall/mcp_servers | Developer+ | Register a server (409 on duplicate name). |
PUT /api/workspace/firewall/mcp_servers | Developer+ | Update a server (id in body). |
DELETE /api/workspace/firewall/mcp_servers/:id | Developer+ | Soft-delete; frees the name. |
POST /api/workspace/firewall/mcp_servers/:id/probe | Developer+ | Probe reachability + discover tools. |
GET /api/v1/firewall/mcp_servers (enabled servers only). For
how to authenticate that side, see
authenticate the MCP gateway.
Why connect through OrcaRouter at all? So one place sees every tool
call — one connection, one policy, one audited log, and credentials
injected at dispatch instead of scattered across agent configs. Read
securing AI agents and the
MCP tool-poisoning threat for the
motivation.
Related
MCP security overview
The full MCP governance model, end to end.
Firewall: MCP servers
The gateway’s runtime behavior and per-call verdicts.
Authenticate the gateway
Mint and scope the token your agent connects with.
Trust checklist
Everything to verify before you trust a new server.
