# Deciders MCP Tools

> The MCP tools the SOAT server exposes for the Deciders module, with the arguments each tool takes.

# Deciders

MCP tools for the Deciders module. See the [Deciders module docs](/docs/modules/deciders) for permissions and data model.

### `list-deciders`

List deciders

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | no | Project ID (required if not using project key auth) |
| `limit` | `number` | no | Results per page. Above the maximum it is clamped, and `limit` in the response reports the page served; below 1 or not an integer it is `400 VALIDATION_FAILED`. |
| `offset` | `number` | no | Results to skip. Negative or not an integer it is `400 VALIDATION_FAILED`. |

### `create-decider`

Create a decider

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | no | Project ID (required if not using project key auth) |
| `name` | `string` | yes | Human-readable name, unique per project |
| `description` | `string \| null` | no | — |
| `agent_id` | `string` | no | A tool-less agent that answers |
| `tool_id` | `string` | no | An http or pipeline tool that answers |
| `questions` | `array<object>` | yes | The questions, in the order the model is shown them. |
| `version_label` | `string` | no | Optional tag for version 1, e.g. `initial` |

### `get-decider`

Get a decider

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `decider_id` | `string` | yes | The decider ID |

### `update-decider`

Update a decider

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `decider_id` | `string` | yes | The decider ID |
| `name` | `string` | no | — |
| `description` | `string \| null` | no | — |
| `agent_id` | `string` | no | Replaces the backend with this agent |
| `tool_id` | `string` | no | Replaces the backend with this tool |
| `questions` | `array<object>` | no | The questions, in the order the model is shown them. |
| `version_label` | `string` | no | Optional tag for the version this write archives. Ignored when the write changes no question, since no version is archived. |
| `expected_version` | `any` | no | Refuses the write unless the decider is at this version. |

### `delete-decider`

Delete a decider

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `decider_id` | `string` | yes | The decider ID |

### `list-decider-versions`

List a decider's versions

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `decider_id` | `string` | yes | The decider ID |
| `limit` | `number` | no | Results per page. Above the maximum it is clamped, and `limit` in the response reports the page served; below 1 or not an integer it is `400 VALIDATION_FAILED`. |
| `offset` | `number` | no | Results to skip. Negative or not an integer it is `400 VALIDATION_FAILED`. |

### `get-decider-version`

Fetch an archived decider version

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `decider_id` | `string` | yes | The decider ID |
| `version` | `number` | yes | The archived version number |

### `restore-decider-version`

Restore an archived decider version

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `decider_id` | `string` | yes | The decider ID |
| `version` | `number` | yes | The archived version number |
| `label` | `string` | no | Optional tag for the new version. Defaults to `restored from vN`. |

### `create-decision`

Request a decision

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `decider_id` | `string` | yes | The decider ID |
| `input` | `any` | yes | What is judged, not stored: a string; a list of `user` messages whose `content` is a string or `input_text` and `input_image` parts (an image as a base64 data URL); or any other JSON value, which an agent is shown as indented JSON. An array of objects carrying `role` is read as messages. |
| `metadata` | `any` | no | Caller-owned annotations stored on the decision and returned on every read — typically the id of what was judged, since the input itself is not stored. Written once, with the decision. A non-object is rejected with `400 VALIDATION_FAILED` and no decision is written. |

### `create-inline-decision`

Request a decision with inline questions

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | no | Project ID (required if not using project key auth) |
| `agent_id` | `string` | no | A tool-less agent that answers |
| `tool_id` | `string` | no | An http or pipeline tool that answers |
| `questions` | `array<object>` | yes | The questions, in the order the model is shown them. |
| `input` | `any` | yes | What is judged, not stored: a string; a list of `user` messages whose `content` is a string or `input_text` and `input_image` parts (an image as a base64 data URL); or any other JSON value, which an agent is shown as indented JSON. An array of objects carrying `role` is read as messages. |
| `metadata` | `any` | no | Caller-owned annotations stored on the decision. A non-object is rejected with `400 VALIDATION_FAILED`. |

### `list-decisions`

List decisions

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `project_id` | `string` | no | Project ID (required if not using project key auth) |
| `decider_id` | `string` | no | Only decisions requested from this decider |
| `status` | `array<string>` | no | Only decisions in these statuses. Repeat the parameter to OR values. A value outside the enum, empty string included, is a `400`. |
| `limit` | `number` | no | Results per page. Above the maximum it is clamped, and `limit` in the response reports the page served; below 1 or not an integer it is `400 VALIDATION_FAILED`. |
| `offset` | `number` | no | Results to skip. Negative or not an integer it is `400 VALIDATION_FAILED`. |

### `get-decision`

Get a decision

#### Arguments

| Argument | Type | Required | Description |
| -------- | ---- | -------- | ----------- |
| `decision_id` | `string` | yes | The decision ID |
