# Tools

Discover, inspect, and invoke tool plugins through /v1/tools.

## Catalog first

`client.tools.list()` (`GET /v1/tools`) returns the plugin catalog and `client.tools.get(pluginId)` (`GET /v1/tools/{pluginId}`) reads one plugin definition. Reads need `seatool:read`.

```bash
const catalog = await client.tools.list();
const plugin = await client.tools.get("image.caption");
```

## Invoke a tool

`client.tools.invoke(pluginId, toolName, body?)` posts to `/v1/tools/{pluginId}/{toolName}/invoke` and requires `tool:invoke`. The body is `{ input, version?, mode? }`.

```bash
const result = await client.tools.invoke("image.caption", "caption_image", {
  input: { imageUrl: "https://example.com/image.png" },
});
```
