Update or explicitly enable a tested upstream (AAL3).
const url = 'https://example.com/v1/console/mcp-gateway/servers/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0';const options = { method: 'PUT', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"server":{"allowed_tools":[{"destructive":true,"name":"example","required_scope":"example"}],"args":["example"],"command":"example","credential_ref":"example","egress_cidrs":["example"],"egress_hosts":["example"],"enabled":true,"env":{"additionalProperty":"example"},"env_secret_refs":{"additionalProperty":"example"},"name":"example","pin":{"program":"example","sha256":"example","version":"example"},"targets":[{"target_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","target_kind":"workspace"}],"transport":"stdio","trust":{"issuer":"example","jwks":{},"jwks_url":"example","resource":"example"},"url":"https://example.com"},"version":1}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PUT \ --url https://example.com/v1/console/mcp-gateway/servers/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "server": { "allowed_tools": [ { "destructive": true, "name": "example", "required_scope": "example" } ], "args": [ "example" ], "command": "example", "credential_ref": "example", "egress_cidrs": [ "example" ], "egress_hosts": [ "example" ], "enabled": true, "env": { "additionalProperty": "example" }, "env_secret_refs": { "additionalProperty": "example" }, "name": "example", "pin": { "program": "example", "sha256": "example", "version": "example" }, "targets": [ { "target_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "target_kind": "workspace" } ], "transport": "stdio", "trust": { "issuer": "example", "jwks": {}, "jwks_url": "example", "resource": "example" }, "url": "https://example.com" }, "version": 1 }'Updates an own-tenant server using version compare-and-swap. Enabling requires a successful current probe, resource and issuer trust and explicit tool scopes. Requires tenant admin and AAL3.
Authorizations
Section titled “ Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “ Path Parameters ”Server identifier in this tenant.
Header Parameters
Section titled “ Header Parameters ”Authenticated target tenant; workspace-confined credentials are refused.
Request Body required
Section titled “ Request Body required ”object
object
Explicit administrator-authored tool authority. Enabling with this field omitted gives every tested tool tools:call scope and requires approval, regardless of server annotations. Only an explicit policy can allow a call without approval. An explicit empty array permits no tools.
object
Existing script and file arguments receive exact read/execute grants without opening their parents. Existing named code directories are read-only. The session folder is the only writable user directory; the runner supplies a private home and temp. Engine protected files remain denied; managed code below data/tools is readable.
Executable on the engine node. No shell is used. Infer stdio when supplied; omit URL. Runs as the engine user in the session folder with the session runner; process confinement follows the runner’s reported state. Without egress_hosts the command keeps the network of its launch.
Own tenant store:mcp/
Command servers only: the HTTPS hosts (host or host:port, lowercase, port 443 implied) the command may reach, at public addresses only, through a per-launch network namespace and proxy. Any other host, localhost and loopback or private addresses are refused. A host that cannot build that boundary refuses the start. Changing the list withdraws the last test.
Public environment values only; credentials belong in env_secret_refs. HOME, TMPDIR, TMP and TEMP are reserved: the runner supplies private child directories, removed at exit.
object
Environment names mapped to own-tenant store:mcp/ references. Values resolve at launch and never enter arguments or logs.
object
Command servers only: run the tool installed with olivares tool install –from at this exact version. The engine sets command and sha256 from that verified install and refuses a version that is not installed. A launch whose executable digest differs refuses to start. A write that omits the field keeps the stored pin unless it changes command, which unpins the server; another digest withdraws the last test.
object
Filled by the engine from the verified install; a write that sends it must name that digest.
Nodes of the skills assignment tree this server serves: a session gets its tools only when its run is under one of them (its workspace, registered folder, template, agent groups, agent or the session itself). Empty serves every session of the tenant. A write that omits the field keeps the stored targets; send [] to clear them. A target that does not exist matches no session.
object
object
Public asymmetric JWKS only; private keys are rejected.
object
Exact HTTPS endpoint without credentials, query or fragment.
Current tenant configuration version; stale writes return 409.
Responses
Section titled “ Responses ”Current reference-only configuration
object
object
object
Explicit administrator-authored tool authority. Enabling with this field omitted gives every tested tool tools:call scope and requires approval, regardless of server annotations. Only an explicit policy can allow a call without approval. An explicit empty array permits no tools.
object
Existing script and file arguments receive exact read/execute grants without opening their parents. Existing named code directories are read-only. The session folder is the only writable user directory; the runner supplies a private home and temp. Engine protected files remain denied; managed code below data/tools is readable.
Executable on the engine node. No shell is used. Infer stdio when supplied; omit URL. Runs as the engine user in the session folder with the session runner; process confinement follows the runner’s reported state. Without egress_hosts the command keeps the network of its launch.
Own tenant store:mcp/
Command servers only: the HTTPS hosts (host or host:port, lowercase, port 443 implied) the command may reach, at public addresses only, through a per-launch network namespace and proxy. Any other host, localhost and loopback or private addresses are refused. A host that cannot build that boundary refuses the start. Changing the list withdraws the last test.
Public environment values only; credentials belong in env_secret_refs. HOME, TMPDIR, TMP and TEMP are reserved: the runner supplies private child directories, removed at exit.
object
Environment names mapped to own-tenant store:mcp/ references. Values resolve at launch and never enter arguments or logs.
object
Command servers only: run the tool installed with olivares tool install –from at this exact version. The engine sets command and sha256 from that verified install and refuses a version that is not installed. A launch whose executable digest differs refuses to start. A write that omits the field keeps the stored pin unless it changes command, which unpins the server; another digest withdraws the last test.
object
Filled by the engine from the verified install; a write that sends it must name that digest.
object
One redacted stderr line or OS error explaining a local server failure. Also present in the server’s stored status. Credentials and terminal control characters are removed.
The HTTP status the server answered, with reason http_status.
Why an unreachable test failed. Local servers report process_start or process_exit and a redacted one-line detail; remote failures report their connection class or HTTP status.
object
Registered tool names whose current successful catalogue declares read-only behavior. A proposal for administrator review, never authority: Test observes declarations without proving tool safety. Empty when no current proposal exists.
Nodes of the skills assignment tree this server serves: a session gets its tools only when its run is under one of them (its workspace, registered folder, template, agent groups, agent or the session itself). Empty serves every session of the tenant. A write that omits the field keeps the stored targets; send [] to clear them. A target that does not exist matches no session.
object
object
Public asymmetric JWKS only; private keys are rejected.
object
Exact HTTPS endpoint without credentials, query or fragment.
One /session/mcp endpoint aggregates the session’s enabled servers and Olivares work tools. It accepts the launch-issued session credential and calls internal module APIs with the resolved principal; it never forwards that bearer into the admin API. Server tool aliases are stable and server-scoped.
Current tenant configuration version; stale writes return 409.
Example
{ "servers": [ { "probe": { "reason": "dns" }, "targets": [ { "target_kind": "workspace" } ], "transport": "stdio" } ], "source": "file"}Admission, source ownership, version or availability refusal
object
object
With code module_not_enabled: the namespace of the module this node does not run.
Example generated
{ "error": { "code": "example", "message": "example", "module": "example" }}Admission, source ownership, version or availability refusal
object
object
With code module_not_enabled: the namespace of the module this node does not run.
Example generated
{ "error": { "code": "example", "message": "example", "module": "example" }}Admission, source ownership, version or availability refusal
object
object
With code module_not_enabled: the namespace of the module this node does not run.
Example generated
{ "error": { "code": "example", "message": "example", "module": "example" }}Admission, source ownership, version or availability refusal
object
object
With code module_not_enabled: the namespace of the module this node does not run.
Example generated
{ "error": { "code": "example", "message": "example", "module": "example" }}Admission, source ownership, version or availability refusal
object
object
With code module_not_enabled: the namespace of the module this node does not run.
Example generated
{ "error": { "code": "example", "message": "example", "module": "example" }}Admission, source ownership, version or availability refusal
object
object
With code module_not_enabled: the namespace of the module this node does not run.
Example generated
{ "error": { "code": "example", "message": "example", "module": "example" }}