brand_create
Create a brand in your organization. You can write its body now or later.
Ask for a new brand. The agent creates it, and it writes a body from your words.
“Set up a brand for Acme. We sell one running shoe, direct to the runner. Our tone is plain and measured.”
The agent calls brand_create. You then see the new brand Acme with a body that has an Identity heading and a Voice heading. The body has no Guidelines heading and no Messaging heading until you write them.
The job guide Describe a brand shows each step of the job.
Reference
Create a brand in the active organization. The context of the brand is one optional Markdown body (up to 50,000 characters). Name and description alone is a valid start. Suggested headings for the body: “## Identity” (positioning, mission, offer, category), “## Voice” (tone and personality), “## Guidelines” (rules, claims to avoid, compliance) and “## Messaging” (key messages, proof points). The headings are advice, not a schema. The slug (its stable handle) is derived from the name unless one is given. Fails if the slug already exists.
Input
| Argument | Type | Required | Description |
|---|---|---|---|
body |
string, 1 to 50000 characters | no | The context of the brand, as one Markdown text. Suggested headings: Identity, Voice, Guidelines, Messaging. |
description |
string, 1 to 500 characters | yes | One-line summary — what an agent reads to pick this brand from a list. |
name |
string, 1 to 120 characters | yes | Human-readable display name. |
slug |
string, at most 120 characters | no | Optional explicit slug handle; normalized to kebab-case. Defaults to a slug derived from the name. |
website_url |
string, at most 2048 characters | no | The brand’s public site, http or https. A locator like the slug — where the brand lives on the web — not part of the body, and setting it reads nothing. |
Output
A successful call returns this object in structuredContent.
| Field | Type | Always present | Description |
|---|---|---|---|
brand |
object | yes | The brand in full. |
brand.body |
string or null | yes | The context of the brand, as one Markdown text. null when no body is written. Headings such as Identity, Voice, Guidelines and Messaging are the advice of the tools, and the body does not need them. |
brand.createdAt |
number | yes | Milliseconds since the Unix epoch, in UTC. |
brand.createdBy |
string | yes | The user who created the record (usr_…). |
brand.description |
string | yes | One line about the brand. An agent picks a brand on it. |
brand.id |
string | yes | The id of the brand (brd_…). |
brand.logoDocumentId |
string or null | yes | The document that the brand nominates as its logo (doc_…). null when no document is the logo. |
brand.name |
string | yes | The display name. |
brand.revision |
number | yes | The version of the record. Each change adds 1. Send it as base_revision to update or delete the record. |
brand.slug |
string | yes | The handle of the brand in the organization. The tools take it as brand_name. |
brand.updatedAt |
number or null | yes | Milliseconds since the Unix epoch, in UTC. null until the first change. |
brand.websiteUrl |
string or null | yes | The public site of the brand. null when it is not set. AdCrunch keeps the address and does not read the site. |
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_conflictorganization_unentitledforbiddeninvalid_requestinternal_error
Scope
The token must hold brand: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.
- Not destructive. The tool makes only additive changes.
- 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": "## Identity\n\nAcme makes one running shoe and sells it direct. The promise is a thousand kilometres on the same pair, and a resole rather than a replacement.\n\n## Voice\n\nPlain and measured. Short sentences. No superlative the shoe cannot earn.\n\n## Guidelines\n\n- Name the distance, never the \"journey\".\n- Claim the kilometres the shoe is tested to, and no more.\n- Do not compare the shoe to a named competitor.\n\n## Messaging\n\n- One shoe, a thousand kilometres.\n- Resole it twice, and keep running on it.\n- Sold direct, so the price is the cost of the shoe.",
"description": "Running shoes sold direct to the runner, made to last a thousand kilometres.",
"name": "Acme",
"website_url": "https://acme.example"
}
The result, in structuredContent:
{
"brand": {
"body": "## Identity\n\nAcme makes one running shoe and sells it direct. The promise is a thousand kilometres on the same pair, and a resole rather than a replacement.\n\n## Voice\n\nPlain and measured. Short sentences. No superlative the shoe cannot earn.\n\n## Guidelines\n\n- Name the distance, never the \"journey\".\n- Claim the kilometres the shoe is tested to, and no more.\n- Do not compare the shoe to a named competitor.\n\n## Messaging\n\n- One shoe, a thousand kilometres.\n- Resole it twice, and keep running on it.\n- Sold direct, so the price is the cost of the shoe.",
"createdAt": 1790000000000,
"createdBy": "usr_4d8b12",
"description": "Running shoes sold direct to the runner, made to last a thousand kilometres.",
"id": "brd_6a9c33",
"logoDocumentId": null,
"name": "Acme",
"revision": 1,
"slug": "acme",
"updatedAt": null,
"websiteUrl": "https://acme.example"
}
}