brand_create
Create a brand in your organization. Every context section is optional — start with a name and fill it in over time.
Creates a Brand in your organization. Its slug — the stable handle agents use — is derived from the name unless you pass one explicitly.
Input
| Field | Type | Required | Description |
|---|---|---|---|
name |
string |
yes | Display name. |
description |
string |
yes | One-line summary, used when listing brands. |
identity |
string |
no | Positioning, mission, offering, category (markdown). |
voice |
string |
no | Tone of voice and personality (markdown). |
guidelines |
string |
no | Do’s and don’ts, claims to avoid (markdown). |
messaging |
string |
no | Key messages, value props, proof points (markdown). |
website_url |
string |
no | The brand’s public site. http/https, up to 2048 characters. |
slug |
string |
no | Explicit handle; normalized to kebab-case. |
Every context section is optional. A brand with nothing but a name and description is a valid starting point — you’re expected to fill it in as you go, not to write the whole thing up front.
website_url is a locator, like the slug — where the brand lives on the web, not a fifth section. It is stored and handed back by brand_get; its contents are not. Setting it does nothing on its own.
Output
The created brand, including its slug and revision (which starts at 1).
Example
“Set up a brand for Acme Running — direct, unfussy tone, never hype it.”
brand_create({
name: 'Acme Running',
description: 'DTC running shoes.',
voice: 'Direct, unfussy, never hype.',
});
// → { slug: 'acme-running', revision: 1, identity: null, … }
Requires the brand:write scope.
Reference
Create a brand in the active organization. Every context section is optional — a brand is authored incrementally, so name and description alone is a valid start. 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 |
|---|---|---|---|
description |
string | yes | One-line summary — what an agent reads to pick this brand from a list. |
guidelines |
string | no | Do’s and don’ts, guardrails, claims to avoid, compliance notes (markdown). |
identity |
string | no | Who the brand is: positioning, mission, what it offers, category (markdown). |
messaging |
string | no | Key messages, value propositions, proof points (markdown). |
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. |
voice |
string | no | Tone of voice and personality (markdown). |
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 a context section, and setting it reads nothing. |
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 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.
- 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.