Changing an agent or testing a server needs the organization developer or admin role. Testing a server needs the create permission, so the organization user role can’t run a test. See Organizations and roles. The server must use the Streamable HTTP transport at a public
http or https URL. Servers on private, loopback, or link-local addresses are refused. Local servers that run over stdio aren’t supported. If the server needs a token, have it ready; the token goes in a vault.About the Managed Agents MCP endpoint
About the Managed Agents MCP endpoint
On the Managed Agents MCP endpoint, operation arguments name path parameters in camelCase, such as
vaultId, while request bodies keep their snake_case fields, such as vault_id. Create skills with scripts, and read a skill version’s content, in the console or with the REST API.Add an MCP server to an agent
Each server entry has aname and a url. MCP servers belong to the agent version, so adding one creates a new version. Running sessions keep the tools they have until you move them to the new version.
- Console
- cURL
- In the sidebar, click Agents and open the agent.
- On Configuration, find Tools and click Add custom MCP server.
- Choose a server from the list or paste its URL. The list suggests a few common servers and says what kind of token each needs. A server from the list is named for you; any other server is named after its URL.
- Click Save new version.
project-tracker offers list_issues, the agent sees project-tracker__list_issues. The prefix keeps two servers from clashing. A new version replaces the whole definition, so send skills, tool settings, vault defaults, and every other field you want to keep. See Agents. Next, authenticate the server.
Server entry fields
Server entry fields
Authenticate the server
Store the server’s token in a vault as a Token for an MCP server (bearer_token) whose server URL matches the agent’s url. Then grant the vault to the agent with defaultVaultIds, or to a session with vault_ids. If you narrow grants with credential refs, include this credential.
Tokens that you paste are stored as-is and aren’t refreshed. If the server issues short-lived OAuth access tokens, rotate the credential before it expires.
How matching works
How matching works
- URLs match after lowercasing the scheme and host, dropping a default port (
:443or:80), and ignoring a trailing slash. A different path, subdomain, or port is a different server, so the token isn’t sent there. - The token is sent as
Authorization: Bearer <token>by default. For a custom credential header such asX-Api-Key, set the vault bearer credential’ssecret_name(API only) to the header name. The token is sent as-is under that name. Credential protection also applies to other permitted custom header names when they are bound this way through the vault. - If two granted vaults hold a token for the same server, the vault listed first in the session’s grants wins.
- If no token matches, the session connects without one. That works for public servers and fails for servers that need authorization.
Test a server before you use it
probeMcpServer makes one live connection using the same URL matching and vault lookup as a session. It creates and changes nothing, but it needs the Developer or Admin role, like creating resources. See Organizations and roles. Omit vault_ids to test without a token.
- Console
- cURL
- In the sidebar, click Credential vaults and open the vault.
- Expand the server’s Token for an MCP server row. It shows whether the server is reachable and how many tools it offers.
- Click Test again to run a new test.
200. Read the body:
What success means: a passing test proves the server is reachable and that the token lets you list tools. It doesn’t prove that every tool call will succeed; permissions, arguments, and the server’s own state still matter.
Every test response field
Every test response field
A test gives up after 15 seconds. A server on a private, loopback, or link-local address is refused before anything is sent, so the test returns
reachable: false and fault: egress_blocked with the reason in error.How a session uses an MCP server
- When a session starts, or moves to another agent version, it reads the MCP servers on that version.
- For each server, it looks for a Token for an MCP server in the session’s granted vaults whose server URL matches.
- It connects, lists the server’s tools, and fixes that list and the tool schemas until the session moves to another agent version.
- The agent calls a tool as
<server name>__<tool name>. The token is attached to every call outside the sandbox.
Choose which tools an agent gets
A session receives every tool the server lists for its token. You can’t hide individual tools of a server. To limit what an agent can do, give it a token whose scopes allow only what it needs, or point it at a server that offers fewer tools.Require approval before a tool runs
A server entry can name tools that run only after a person approves the exact call. Add anapproval object with the API or an agent folder. The console keeps it when you save the agent, including on a server it generated from a vault credential, but doesn’t edit it yet. A gated server generated from a vault credential has no remove button, because removing the card alone would let the credential grant recreate it without its approval. It is reachable only while a granted credential claims its URL, so turning that credential off stops it; to remove the entry itself, delete it in Raw mode along with the credential. The console blocks a save that would keep such a server reachable without its approval. Exporting an agent from the console leaves a gated server out, along with any granted credential for its URL, and names both in the export’s notes, so you can add them again in the target organization with its approvers. Exporting to an agent folder keeps the approval object, including on a server generated from a vault credential, which the folder declares by its URL so the exported credential still reaches it gated. Neither export grants a credential for a gated server without its approval, because importing would regenerate the server from the credential ungated.
toolsnames 1 to 64 tools, or is["*"]to gate every tool the server offers, including tools it adds later. When the entry hasallowed_tools, every gated tool must be in it.approvers.slack_user_idsnames 1 to 25 Slack users (IDs start withUorW). Only they can decide.- An empty
approval, an empty list, or an unknown key is refused when you save the agent, so a typo can’t silently remove the gate. - Declare a gated endpoint once. A second entry with the same URL as a gated entry is refused, because only one of them would apply.
- Give a gated server and its vault credential exactly the same URL. A session refuses to start its tools when a granted credential’s URL is a different spelling of a gated server’s URL (different case, extra slashes, or
.and..path segments), rather than send the credential without the approval.
- Recursion posts an approval card in the session’s Slack thread showing the tool, the server, and every argument, with Approve and Deny buttons. The arguments are shown as JSON. In the arguments and in the tool and server names, backticks and characters that can hide or reorder text (invisible, direction-changing and combining characters, and spaces other than a plain space) appear as
\uescapes, so what you read is exactly what runs. Letters that only look like others, from a different alphabet, still appear as letters, so read names and values with care. The call doesn’t run, and the agent is told it is waiting. - An approver clicks. Anyone else who clicks sees a private note and nothing changes. The card updates to show who decided, and the session wakes with the decision.
- After an approval, the agent calls the tool again with the same arguments, and the call runs once. A call with different arguments is a new request.
slack_reply_review), because the card would post the arguments to Slack without that review. The approver list is fixed when a session starts; changing it affects new sessions only.
The gate applies to tools reached through this server entry. A vault credential the agent can use for the same server under a different URL, or a native integration for the same vendor, is a separate tool surface and isn’t gated by this entry. A session refuses an entry that declares approval on an endpoint reached only through a native integration, rather than drop the gate and serve those tools ungated.
What happens when a server fails
- At session start: an unreachable server, a rejected token, or a server that lists no tools doesn’t stop the session. Other servers still load, and the session’s events record a warning naming the servers:
mcp_auth_rejectedwhen a server refused the request,mcp_no_toolswhen a server answered but listed no tools, andmcp_discovery_failedfor any other failure. Fix the token, or the URL or server, then start a new session. A running session lists a server’s tools again only when it moves to another agent version; moving it to the version it already runs changes nothing. - During a call: each request to the server has a 60-second timeout, and a response can be at most 8 MiB. A failed call returns an error to the agent as the tool result, and the agent can decide what to do next.
What can go wrong
The most common problems:- A session has an
mcp_auth_rejectedwarning. The server refused the request with401or403. If the warning says the session was granted no credential for the server, turn one on in the agent’s default credentials and save a new agent version, or grant the automation or session a vault that holds one. Otherwise check or rotate the token in the vault. Then start a new session. - A session has an
mcp_no_toolswarning. The server answered but listed no tools. Check that the server offers tools and that its credential grants access to them, then start a new session. - A session has an
mcp_discovery_failedwarning. The server was unreachable, failed the handshake, or is on a private address. Run a test with the same URL and vault, fix the cause, and start a new session. - Unexpected
vault-...tools appear. A granted vault holds a token for an MCP server the agent doesn’t list. Remove the credential from the session’s grants, or add the server to the agent with a name you choose.
Every MCP server problem
Every MCP server problem
Next steps
Vaults and credentials
Store tokens for MCP servers and control which sessions receive them.
Agents
Publish a new agent version with its MCP servers attached.
Tools
See the built-in tools every session can use.
Events
Read discovery warnings and MCP tool calls in the session timeline.