---
title: persona_delete
description: Remove a persona from a brand, guarded against deleting something someone else has since edited.
---

Deletes a **Persona** from its Brand. Guarded by `base_revision`, so a persona someone else has edited since you read it is not silently removed.

The Brand itself is unaffected — deleting a persona removes one audience from the brief, not the brief.

## Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `brand_name` | `string` | yes | The slug of the brand that owns the persona. |
| `persona_name` | `string` | yes | The persona slug. |
| `base_revision` | `integer` | yes | The `revision` you last read via [`persona_get`](/mcp/tools/persona-get). |

## Example

```ts
persona_delete({
  brand_name: 'acme-running',
  persona_name: 'marathon-maya',
  base_revision: 4,
});
```

:::info[The slug becomes free again]

Within that brand. A new persona can immediately re-use the handle, and another brand was never blocked from using it in the first place.

:::

:::warning[Deleting a brand deletes its personas]

[`brand_delete`](/mcp/tools/brand-delete) takes the brand's personas with it. There is no way to keep one — a persona only exists as part of a brand's context.

:::

Requires the `brand:write` scope.

## Reference

Delete a persona from a brand. Pass base_revision (from persona_get) — the delete is rejected if the persona changed since you read it. The slug becomes free to re-use within that brand.

### Input

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `base_revision` | integer | yes | The revision you last read via persona_get. Guards against deleting a persona someone else has since edited. |
| `brand_name` | string | yes | The slug of the brand that owns the persona. |
| `persona_name` | string | yes | The persona slug identifying which to delete. |

### Failure codes

A failed call has `isError` set, and `structuredContent.error` holds one of these codes. [Errors](/mcp/errors) describes the shape of a failed call.

- `not_found`
- `revision_mismatch`
- `forbidden`
- `invalid_request`
- `internal_error`

### Scope

The token must hold `brand:write`. [Auth & scopes](/mcp/auth) lists each scope.

### Annotations

A client reads these hints. A hint that the tool does not declare has the default value of the MCP specification.

- **Writes.** The tool can change data.
- **Destructive.** The tool can make a change that you cannot undo. A client can ask you to confirm before it calls the tool.
- **Not idempotent.** A second call with the same arguments can change more.
- **Closed world.** The tool reads and writes the data of AdCrunch only.
