Registering a connector
Two calls, once per server:- Create Connector with the server URL and how to authenticate. For an OAuth server the response carries an
authorize_url- send the customer there and Tavus stores the tokens when they come back. - Attach it to a PAL, below.
oauth_status on the connector to see where an OAuth server stands: linked is ready, needs_reauth means the customer must go through Reconnect OAuth again.
Attaching connectors to a PAL
Setlayers.mcp.connectors to the connector ids you want reachable - either on Create PAL, or on an existing PAL with Patch PAL. There is no separate attach/detach call.
Create PAL with two connectors attached
add (or replace, once layers.mcp is already set) against /layers/mcp/connectors:
Patch PAL to attach a connector
Connectors are attached per PAL, not per conversation. Detaching a connector is the off switch.
Choosing which tools a PAL may call
A connector’s tools are all included by default.layers.mcp.connector_tools scopes that down: a map from connector id to the tool names the PAL may call. One connection can be used across PALs with different scopes. For example, a Customer Support PAL can scope the Slack connection to write access, while a Sales PAL scopes the same connection to read-only access. It is the same connector and the same OAuth grant, permissioned per PAL.
1. List the server’s tools
Preview Connector Tools returns the server’s owntools/list response, untouched. The name of each entry is what you scope with:
GET /v2/connectors/c8-58ea0f6420b2/preview
2. Set the scope on the PAL
Create PAL with one connector scoped down
Patch PAL to scope one connector down
3. Change it later
Patch a longer list to widen a scope. To go back to every tool the server exposes, remove the connector’s entry:Patch PAL back to every tool
An empty array is rejected -
{"c8-58ea0f6420b2": []} is not how you deny a connector. To stop a PAL using a connector, detach it.Following a task from your client
Delegation is asynchronous, so the conversation does not block. Three events describe each task, and every one is keyed bytask_id - up to five tasks can run at once, so the key is what tells you which task an event belongs to.
A task, start to finish
- Key the lifecycle on
agent_start/agent_stop, not onconversation.tool_call. The delegating tool call is also broadcast, but for a task that fails to dispatch the stop is emitted before it. A stop for atask_idyou have not seen is terminal - close it out rather than waiting for a start that is not coming. - Every
agent_startgets exactly oneagent_stop, including tasks that never ran and tasks cancelled when the call ends. There is no state where a task is silently still running. agent_updateis what the agent chose to tell the user, never the answer. The background agent decides when something is worth an update and writes it as a card - a title and a sentence - a few times per task at most. It is the same update the PAL speaks and shows on Magic Canvas, so a client that renders it matches the call. Tool calls are not reported. The result itself is only ever in the stop event - do not assemble it from updates. No updates are emitted unlessspoken_updatesorvisual_updatesisall.- You do not have to relay the result. The PAL speaks it when the task finishes. Use
summaryfor your UI, not for driving speech.
What the user hears
The PAL acknowledges the request when it delegates (“let me look into that”) and keeps the conversation going. When the task finishes, it speaks the outcome - it does not wait for the user to say something first, and if the user has moved on it answers them first and mentions the result after. Interim steps are not spoken unless the user asks what is happening, or the PAL is set to narrate its tasks. A task that fails or times out is spoken too, so the user is never left waiting on something the PAL promised and dropped. A PAL set tonone says nothing in any of these cases. A task still running when the call ends is not - there is no one left to hear it.
What the user sees
A PAL with Magic Canvas on a video call also shows the task as a text card next to the video.layers.mcp.visual_updates decides how much, with the same three values as spoken_updates and independently of it. It defaults to none: a card takes over the canvas, so showing one is opt-in. Under outcome one card appears with the result when the task finishes; under all each update the agent gives replaces the card as the task runs, and the result replaces it at the end. The result card clears itself after 45 seconds. No card is shown in audio-only or chat conversations, in external meetings, or for a PAL without the Magic Canvas skill - the setting is inert there.
Choosing what the PAL says about a task
Two settings pick which moments of a background task reach the user, with the same three values and independent of each other:layers.mcp.spoken_updates for what the PAL says, layers.mcp.visual_updates for what it shows on Magic Canvas. Speech defaults to outcome; the card defaults to none, so it is opt-in.
Create PAL that narrates its tasks
Show every update, say only the result
Patch PAL to keep tasks quiet
all, the background agent decides what is worth saying: it is told to give an update when it learns something the user would want to hear before the answer, or when the task is taking a while, and never to narrate its steps. Problems and retries are not updates; they belong in the outcome. A card shows each update at once; speech takes them one at a time, only when the PAL has room to, so a task that moves quickly voices fewer updates than it shows - conversation.agent_update still carries all of them. A common pairing is visual_updates: all with spoken_updates: outcome: the user can watch the task without the PAL talking over the conversation. Keep outcome for short tasks, where an update is longer than the wait; use all for long ones, where silence reads as a stall. none suits a PAL whose tasks are side effects the user does not need read back, such as logging a note after a call.
This field used to be a boolean; writing one is now rejected.
Limits
A task requested while five are already running is rejected rather than queued, and the PAL tells the user to ask again in a moment.

