---
title: skill_delete
description: Delete an ad-ops playbook (Skill), guarded by base_revision.
---

Deletes a **Skill**. Requires the `skill:write` scope. Like [`skill_update`](/mcp/tools/skill-update), it is guarded by `base_revision` — fetch the Skill first so a concurrent edit can't be silently lost.

## Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `skill_name` | `string` | yes | The slug identifying which Skill to delete. |
| `base_revision` | `number` | yes | The `revision` you last read via `skill_get`. Guards against deleting a race. |

## Output

Confirmation of deletion. The Skill stops appearing in [`skill_list`](/mcp/tools/skill-list) and [`skill_get`](/mcp/tools/skill-get), and its slug becomes free to reuse for a new Skill.

## Example

> _"Delete the old black-friday-audit skill."_

```ts
const skill = skill_get({ skill_name: 'black-friday-audit' }); // revision 2
skill_delete({
  skill_name: 'black-friday-audit',
  base_revision: skill.revision,
});
```

:::info[Recovery is operator-only]

Deletes are soft (the row is tombstoned), but there is no self-serve restore in the console or over MCP. If you delete a Skill by mistake, contact support.

:::

## Errors

- **Stale revision** — the Skill changed since you read it. Re-fetch with `skill_get` and retry with the latest `base_revision`.
- **Not found** — no Skill with that slug exists.
- `401` or `403` — see [Errors](/mcp/errors), which every tool shares. This one needs `skill:write`.

## Reference

Delete an ad-ops playbook (Skill). Pass base_revision (from skill_get) — the delete is rejected if the Skill changed since you read it. The slug becomes free to re-use afterwards.

### Input

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `base_revision` | integer | yes | The revision you last read via skill_get. Guards against deleting a concurrently-edited Skill. |
| `skill_name` | string | yes | The Skill slug identifying which Skill 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 `skill: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.
