MCP servers and secrets
Your MCP servers and the tools they offer, and the secrets Bash uses but never shows.
PATCH/v1/mcp-servers/{server_id}Change URL, auth or the tool policy floor, for every deployment in both modes.
Users pick it up at their next task. While a deployment's live version uses the server, a test key's change answers 409 mcp_server_live: change it with a live key, or as an owner or admin.
Request5 fields
Path
server_idstringrequiredThe MCP server's id (mcp_...).
- Type
string
Body
namestringA new name, 1 to 80 characters.
- Limits
- 1 to 80 characters.
urlstring (URL)A new public https URL.
- Limits
- At most 2048 characters.
authobjectHow Bash signs in to it, from now on.
- One of
{ type },{ type, headers },{ type }
toolsobjectNew rules for its tools (deny, require_approval), for every deployment that uses the server; a list left out stays as it is.
denystring[]Tools of the server Bash never calls, by name, at most 200. Every deployment that names the server runs under it. It replaces the list; left out, the list stays.
- Limits
- At most 200 items.
require_approvalstring[]Tools of the server that always wait for the person's yes, by name, at most 200. It replaces the list; left out, the list stays.
- Limits
- At most 200 items.
Answers 20011 fields
object"mcp_server"Always mcp_server.
- Type
"mcp_server"
idstringThe MCP server's id.
- Example
mcp_8f2k
slugstringThe name Bash calls it by.
- Type
string
namestringIts name, as people read it.
- Type
string
urlstringThe server's https URL.
- Type
string
authobjectHow Bash signs in to it.
type"none" | "headers"none, or headers sent with every call.
- Type
"none" | "headers"
headersmap of stringmay be absentThe headers, as written: a credential shows as its ${secret:NAME}, never its value.
- Type
map of string
toolsobjectWhich of its tools Bash never calls (deny), and which wait for the person's yes (require_approval), in every deployment that uses the server. A deployment may add to either list, never take from it.
denystring[]Tools of the server Bash never calls, by name, at most 200. Every deployment that names the server runs under it.
- Type
string[]
require_approvalstring[]Tools of the server that always wait for the person's yes, by name, at most 200.
- Type
string[]
secretsstring[]The company secrets it needs (${secret:NAME}), by name: store each with PUT /v1/secrets/{name}.
- Type
string[]
user_secretsstring[]The secrets each user needs (${user_secret:NAME}), by name: store each user's with PUT /v1/secrets/{name} and their user_id.
- Type
string[]
created_atstringWhen it was made, as an ISO 8601 date and time in UTC.
- Type
string
updated_atstringWhen it last changed, as an ISO 8601 date and time in UTC.
- Type
string
No sample in your language for this route, so here it is over HTTP.
curl -X PATCH "$VESTRA_BASE_URL/v1/mcp-servers/{server_id}" \ -H "Authorization: Bearer $VESTRA_API_KEY" \ -H "Content-Type: application/json" \ -d '{}'