> ## Documentation Index
> Fetch the complete documentation index at: https://docs.testworld.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Tools

> Where the agent works.

The tools are not routes of the control API. They are the simulated services, on the real APIs' shape.

## 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. In `offsite-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 with `409` and is not counted. Gmail and Calendar answer in Google's error shape, Slack in its own.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.