skill_update
Update an ad-ops playbook (Skill), guarded by base_revision so concurrent edits aren't clobbered.
Updates an existing Skill. Requires the skill:write scope. Always fetch the Skill with skill_get first so you have its current revision, then pass it back as base_revision — the update is rejected if the Skill changed since you read it.
Input
| Field | Type | Required | Description |
|---|---|---|---|
skill_name |
string |
yes | The current slug identifying which Skill to update. |
base_revision |
number |
yes | The revision you last read via skill_get. Guards against overwriting a race. |
name |
string |
no | New display name. |
description |
string |
no | New discovery description. |
body |
string |
no | New playbook instructions. |
slug |
string |
no | Optional new slug (a deliberate rename); normalized to kebab-case. |
Only the fields you pass change; the rest carry forward. On success the revision is bumped.
Output
The updated Skill, including its new revision.
Example
“Add a rule to the weekly-meta-audit skill: always end with a one-line summary.”
const skill = skill_get({ skill_name: 'weekly-meta-audit' }); // revision 3
skill_update({
skill_name: 'weekly-meta-audit',
base_revision: skill.revision,
body: `${skill.body}\n\n## Rules\n- End with a one-line summary.`,
});
// → { slug: 'weekly-meta-audit', revision: 4, … }
Errors
- Stale revision — the Skill changed since you read it. Re-fetch with
skill_getand retry with the latestbase_revision. - Slug conflict — a rename collided with another live Skill’s slug.
- Invalid slug — the new slug has no letters or digits.
- Not found — no Skill with that slug exists.
401or403— see Errors, which every tool shares. This one needsskill:write.
Reference
Update an ad-ops playbook (Skill). Pass base_revision (from skill_get) — the update is rejected if the Skill changed since you read it. Only the fields you pass are changed. Optionally rename the slug handle.
Input
| Argument | Type | Required | Description |
|---|---|---|---|
base_revision |
integer | yes | The revision you last read via skill_get. Guards against overwriting a concurrent edit. |
body |
string | no | New playbook instructions. |
description |
string | no | New discovery description. |
name |
string | no | New display name. |
skill_name |
string | yes | The current Skill slug identifying which Skill to update. |
slug |
string | no | Optional new slug handle (a deliberate rename); normalized to kebab-case. Callers of the old handle must be updated. |
Failure codes
A failed call has isError set, and structuredContent.error holds one of these codes. Errors describes the shape of a failed call.
not_foundinvalid_slugrevision_mismatchslug_conflictforbiddeninvalid_requestinternal_error
Scope
The token must hold skill:write. Auth & scopes 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.