- Connect the server with
POST /v1/mcp-servers. Its tools are read straight away. - Choose which tools agents may use with
enabled_tools. - Attach the server to an agent with
mcp_server_ids.
Connect a server
name is what the agent is told the app is called, so use the name a caller
would say. The answer lists every tool the server offers and a status:
Agents only use servers that are
ready. POST /v1/mcp-servers/{id}/refresh
reads the tools again and updates the status.
Authentication
nonefor a public server.headersfor an API key or any fixed header. Values are encrypted at rest and never returned; responses list only the header names. On update, send a header withoutvalueto keep the stored one.oauthfor a server that signs in. Most hosted MCP servers do.
Servers that sign in with OAuth
Create the server with"auth": { "type": "oauth" }, then start the sign-in:
authorization_url in a browser and sign in. When the provider sends the
browser back, the server is connected and its tools are read. The link works
once and expires after ten minutes.
Wixzel Voice registers itself with the server’s authorization server
automatically when the server allows it. If it does not (GitHub’s, for one),
register an OAuth app with the provider using the redirect_uri above, and
send its id and secret as auth.oauth.client_id and auth.oauth.client_secret.
Tokens are refreshed automatically during calls. If a refresh fails, the server
moves to needs_auth and agents stop using it until it is connected again.
Choose the tools
Only tools inenabled_tools are ever offered to an agent. Until you set it,
the first discovery enables only the tools the server marks read-only
(readOnlyHint). Anything that can change data has to be switched on on
purpose.
Attach it to an agent
[] to detach
all of them. Deleting a server detaches it from every agent.
What happens on a call
- The tools are declared to the model when the call starts, from the stored list, so connecting a server never delays the greeting. The connections open in the background.
- Each tool is named
<app>__<tool>, for exampleorders__lookup_order, and its description starts with the app’s name. - The agent says a few words before it uses a tool, so the caller is not left in silence. On the classic and Sarvam engines, if the model goes straight to the tool, the agent says “One moment, let me check that.” for it.
- Before using a tool the server marks as changing data, the agent asks the caller to confirm.
- A tool call times out after 10 seconds. Failures become a sentence the agent can say (“I couldn’t reach Orders right now”); they never end the call.
- Results are cut to 4,000 characters before the model sees them.
- At most 20 tool calls per call, and three rounds of tool calls per caller turn before the agent has to answer in words.
GET /v1/calls/{id} returns them in
tool_calls, with the arguments, whether it worked, and how long it took.
All four engines support tools: classic, sarvam, gemini-live and
deepgram-agent.
Cost
Tool calls are free. The extra language-model tokens a tool result adds to the conversation are billed as usual, on the agent’s LLM line in/v1/usage/events.
Security
- Allowlist. Only enabled tools are declared, and a call to any other name is refused even if the model guesses it.
- Untrusted results. The agent is told that tool results are data, not instructions.
- Network. Server URLs must be public
https(orhttp) on port 443 or 80. Private, loopback and link-local addresses are refused when the server is saved and again on every request, including each redirect, and the connection goes to the address that was checked. A redirect to another host does not carry your headers. - Secrets. Header values, OAuth tokens and client secrets are encrypted at rest and never returned by the API.
- Scopes. Managing servers needs
mcp_servers:readandmcp_servers:write.

