Addresses
The pattern is{tools_url}/{real host}/{real path}. For offsite-planning:
{tools_url}/gmail.googleapis.com/gmail/v1/...is Gmail, as the Gmail REST API.{tools_url}/slack.com/api/...is Slack, as the Slack Web API.{tools_url}/www.googleapis.com/calendar/v3/...is Calendar, as the Calendar REST API.
mcp_url ({tools_url}/mcp) is one MCP address for an MCP client. It serves the Gmail and Slack tools together. Calendar is REST only.
The run token
Authenticate every tool call with the run token:Authorization: Bearer tw_run_.... For Slack you can also send it as the token form field. It is valid until the run’s expires_at. Your API key does not work on the tools, and the run token does not work on the control routes.
How calls are counted
calls counts every request a tool answered, reads and writes alike. A call the tool answered with its own error counts. A request refused before it reached a tool does not. On MCP only tools/call counts. Each counted call is one entry in the trace.
Reactions
An environment can carry simulated colleagues who answer. Inoffsite-planning, a post in #leadership gets replies from Erik and Mari in the thread. The replies show in the call’s reactions and in the state diff. They are not calls.
After the end
Every tool call on an ended run is refused with409 and is not counted. Gmail and Calendar answer in Google’s error shape, Slack in its own.