skill_create
Save a way of working as a new Skill of your organization.
Ask the agent to save a way of working as a Skill. AdCrunch keeps the Skill in your organization, and each agent that connects to your organization can then find it and run it.
Save what we just did as a Skill called “Weekly budget review”. I want to run it every Monday.
The agent writes the playbook and a description that says when to use the Skill, and then calls this tool. AdCrunch makes the slug from the name: the words of the name in lower case, with a hyphen between two words. The agent can send a different slug. You then see the Skill on the Skills page of the console, and in the prompt menu of your client the next time that the client loads the menu. If another Skill already has that slug, AdCrunch saves nothing, and the agent asks you for a different name. Reuse a playbook walks the whole job.
Reference
Create an ad-ops playbook (Skill) in the active organization. The slug (its stable handle) is derived from the name unless an explicit slug is provided. Fails if a Skill with the same slug already exists in the organization.
Input
| Argument | Type | Required | Description |
|---|---|---|---|
body |
string | yes | The playbook instructions (the Skill body, markdown). |
description |
string | yes | When to use this Skill — what an agent reads to decide whether to load it. |
name |
string | yes | Human-readable display name. |
slug |
string | no | Optional explicit slug handle; normalized to kebab-case. Defaults to a slug derived from the name. |
Output
A successful call returns this object in structuredContent.
| Field | Type | Always present | Description |
|---|---|---|---|
skill |
object | yes | The Skill, as it is after the call. |
skill.body |
string | yes | The playbook: the instructions that the agent follows, in Markdown. |
skill.createdAt |
number | yes | The time at which a user created the Skill, in milliseconds since the Unix epoch, UTC. |
skill.createdBy |
string | yes | The id of the user who created the Skill. |
skill.description |
string | yes | When to use the Skill. An agent reads it to choose a Skill. |
skill.id |
string | yes | The id of the Skill. It does not change when the slug changes. |
skill.name |
string | yes | The display name of the Skill. |
skill.revision |
integer | yes | It increases by one at each change. Send it as base_revision to update or delete the Skill. |
skill.slug |
string | yes | The handle of the Skill in your organization. Send it as skill_name. |
skill.updatedAt |
number or null | yes | The time of the last change to the Skill, in milliseconds since the Unix epoch, UTC. It is null until the first update. |
Failure codes
A failed call has isError set, and structuredContent.error holds one of these codes. Errors describes the shape of a failed call.
invalid_slugslug_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.
Example
The arguments:
{
"body": "## When to run\n\nEvery Monday, before the week starts.\n\n## Steps\n\n1. Read the spend of the last seven days for each active campaign.\n2. Find the campaigns above the target cost per action.\n3. Write down what you found, and what you suggest.",
"description": "Use this every Monday to find the campaigns above the target cost per action.",
"name": "Weekly budget review"
}
The result, in structuredContent:
{
"skill": {
"body": "## When to run\n\nEvery Monday, before the week starts.\n\n## Steps\n\n1. Read the spend of the last seven days for each active campaign.\n2. Find the campaigns above the target cost per action.\n3. Write down what you found, and what you suggest.",
"createdAt": 1789913600000,
"createdBy": "usr_h3k9m2q7w1z5x8c4v6b0n2d7",
"description": "Use this every Monday to find the campaigns above the target cost per action.",
"id": "skl_q8v3m1z6k2d9w4p7x5n0c3j1",
"name": "Weekly budget review",
"revision": 1,
"slug": "weekly-budget-review",
"updatedAt": null
}
}