BashBrainTeammatesPricingDevelopersGet a test key

MCP servers and secrets

Your MCP servers and the tools they offer, and the secrets Bash uses but never shows.

Send Authorization: Bearer vk_test_... on every call. Every route of MCP servers and secrets.

POST/v1/mcp-serversRegister one: URL, auth (none, or headers using ${secret:NAME} or ${user_secret:NAME}), and its tool policy floor: tools never run and tools that always need approval, for every deployment in both modes.

A deployment version's own tool policy adds to the floor and never removes from it.

Your API key, scope setup or all. On the card: deploy. Over HTTP it is made from the contract: fill in every value.

Request6 fields

Headers

Idempotency-KeystringSend the same key to retry this call safely for 24 hours.
Type
string

Body

namestringrequiredIts name, as people read it, 1 to 80 characters.
Limits
1 to 80 characters.
Example
Travel desk
slugstringrequiredThe name Bash calls it by: lowercase letters, digits and hyphens, starting with a letter, up to 40.
Example
travel-desk
urlstring (URL)requiredThe server's public https URL, up to 2,048 characters.
Limits
At most 2048 characters.
Example
https://mcp.example.com/travel
authobjectHow Bash signs in to it. Default { "type": "none" }.
Default
{"type":"none"}
One of
{ type }, { type, headers }, { type }
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. Default: no rule.
Default
{"deny":[],"require_approval":[]}
denystring[]Tools of the server Bash never calls, by name, at most 200. Every deployment that names the server runs under it.
Default
[]
Limits
At most 200 items.
require_approvalstring[]Tools of the server that always wait for the person's yes, by name, at most 200.
Default
[]
Limits
At most 200 items.
Answers 20111 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
HTTP

No sample in your language for this route, so here it is over HTTP.

curl -X POST "$VESTRA_BASE_URL/v1/mcp-servers" \  -H "Authorization: Bearer $VESTRA_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "name": "Travel desk",    "slug": "travel-desk",    "url": "https://mcp.example.com/travel"  }'