Skip to main content
You will build an MCP server with one tool, connect it, and watch an assistant call it.

1. Serve three methods

Any language. The transport is JSON-RPC 2.0 over POST to one URL.
Notifications (notifications/initialized) arrive with no id and expect no result. Answer 202 and move on.

2. Get the host allowlisted

The platform refuses any host that is not on MCP_ALLOWED_HOSTS. This is not configurable per workspace — it is a platform setting, and an empty list denies everything. Send us the hostname before you try to connect.

3. Connect it

In the ops console, Tool servers → Connect a server:
string
required
Workspace slug this server serves.
string
required
Shown to operators, e.g. Acme Commerce.
string
required
Your MCP endpoint, e.g. https://acme.example.com/mcp.
string
Minted by you, sent as Authorization: Bearer … on every request. Write-only once stored.
Press Re-discover. Your tools appear.

4. Switch it on — twice

1

An operator enables the tool

Discovered tools arrive disabled. Connecting a server never silently grants an assistant a new ability.
2

The customer enables the capability

On the assistant, Connected tools must be on. Both gates are required; neither implies the other.

5. Watch it get called

Message the assistant on WhatsApp with something your tool answers. The turn debugger shows every tool called and whether it succeeded.
If the tool is never called, check the two gates above before you look at your server. That is the usual answer.

Next

Tool contract

Naming rules and the schema subset we accept.

Side effects

What happens when the model retries a call that spends money.