> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://platform.bctrl.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://platform.bctrl.ai/_mcp/server.

# MCP tools

> Discover resources and call operational Tools.

There are two meanings of “tool” in this API:

* An **MCP tool** is a function exposed to your AI client.
* A **BCTRL Tool** is a reusable capability such as `stagehand.act`,
  `captcha.solve`, `human.request`, or `vault.secrets.get`.

## Discovery tools

These MCP tools help an agent find the correct operation without guessing:

| MCP tool               | Purpose                                                      |
| ---------------------- | ------------------------------------------------------------ |
| `bctrl_help`           | Read API, SDK, CLI, or MCP guidance from `GET /v1/help`.     |
| `bctrl_search_api`     | Search operations by ID, path, tag, summary, or schema.      |
| `bctrl_get_operation`  | Return exact metadata and schemas for one operation ID.      |
| `bctrl_call_operation` | Invoke any operation by ID through one generic escape hatch. |

`bctrl_search_api`, `bctrl_get_operation`, and `bctrl_call_operation` are
MCP-native helpers. `bctrl_help` is the generated tool for the public `help`
operation and accepts its values under `query`.

## Generated operation tools

Every documented public API operation also becomes one MCP tool. Dots and
hyphens in the operation ID become underscores:

| Operation ID           | MCP tool                     |
| ---------------------- | ---------------------------- |
| `runtimes.list`        | `bctrl_runtimes_list`        |
| `conversations.create` | `bctrl_conversations_create` |
| `tools.call`           | `bctrl_tools_call`           |
| `tools.calls.create`   | `bctrl_tools_calls_create`   |
| `runs.trace.list`      | `bctrl_runs_trace_list`      |

Generated tools use the shared operation envelope described in
[Calling Operations](/mcp/operations). For example:

```json
{
  "pathParams": {
    "toolRef": "stagehand.act"
  },
  "headers": {
    "BCTRL-Runtime-Id": "rt_AAAAAAAAAAAAAAAAAAAAAA"
  },
  "body": {
    "instruction": "Click Continue"
  }
}
```

## Calling BCTRL Tools

Use `bctrl_tools_call` for synchronous execution:

```text
POST /v1/tools/{toolRef}/call
```

Use `bctrl_tools_calls_create` when the capability is asynchronous, may require
human input, or should have a durable ToolCall record:

```text
POST /v1/tools/{toolRef}/calls
```

Durable execution returns a `ToolCallId`. Continue through
`bctrl_tool_calls_get`, `bctrl_tool_calls_result`,
`bctrl_tool_calls_cancel`, or `bctrl_tool_calls_respond`.

Call `bctrl_tools_get` with the BCTRL Tool name to inspect its input and output
schemas. The generated [Built-in Tool reference](/sdk/tools) provides the same
capability-specific documentation for humans.