2026-09-05 The first real calls have been placed: five ended normally, six failed. Here is what broke.

Guide

Give it tools: MCP and an external API

An MCP server connected, its tools filtered, plus an HTTP tool you write yourself.

20 minutes 5 steps

What you end up with

An assistant that can call real tools, with per-tool permissions and every attempt recorded.

§00 What you need first
  • A published assistant.
  • An MCP server you have access to, with a URL and, if it needs one, an authentication method.
  • Or an API of your own with a route you want to expose to the model.
§01 Step

Add the MCP server

Choose the transport, put in the URL, and if the server wants authentication pick between static headers, a bearer token, a stored credential or OAuth. The timeout defaults to 20 seconds and the discovery result is cached for 15 minutes.

Build → MCP → Create → Connection: Name, Transport, URL, timeout 20 s

§02 Step

Run discovery and read what came back

Test connection only does the handshake. Discover now asks for the tool list and stores it. The catalogue then shows, per tool, the parameters, the input and output schemas, the risk level and whether it needs confirmation.

Actions: “Test connection” · “Discover now” · “Re-check”

§03 Step

Narrow what the model is allowed to call

The allow and deny lists are populated only from tools already discovered, so run discovery first or they are empty. Set the default risk level and block the levels you do not want. A denied tool is not merely hidden: a call to it is refused and written to the call ledger.

Permissions → Policy · Allowed / Denied · Default risk level · Blocked risk levels

§04 Step

Make a tool out of each MCP tool you want

This is the step everybody misses: you do not attach a server to an assistant, you attach a tool. Create a tool of type MCP, pick the server, then pick the tool name from the discovered list. That tool is what the assistant gets.

Build → Tools → Create → Type: MCP → Server + Tool name

§05 Step

Or write an HTTP tool of your own

The function name is what the model sees, so write it like a function name. Arguments go in as a JSON schema in an editor that validates as you type. Then you configure the method, URL, headers, body, and where each parameter comes from: the model, a fixed value, a call variable, or a stored credential.

Type: API request → Function name (^[a-zA-Z_][a-zA-Z0-9_]*$) → Arguments (JSON schema) → Parameter bindings

§OK Check

How to tell it worked

  • The MCP server health reads Connected rather than Unverified.
  • In the tool catalogue, the ones you denied show as denied with the reason spelled out.
  • On a test call, the call Tools tab shows tool.started and tool.completed for the tool that was invoked.
§!! Caveats

What does not work yet

Every guide has this section. If it were missing, it would mean we had not looked hard enough.

  • The publish button on tools has no translated label and reads “Publish” whatever the interface language.
  • The shell and computer tools refuse to run. The sandbox they are meant to execute inside does not exist yet, and refusing is better than running them on our machine.
  • Each MCP tool is attached separately. If a server exposes thirty tools and you want all of them, you make thirty tools.