Skip to content
AdCrunch
Esc
↑↓navigate↵open⌘Jpreview
On this page

brand_get

Read one brand in full: its body, its personas, its files and its ad accounts. An agent reads it before it acts for the brand.

Ask for work that needs a brand. The agent reads the brand in full before it writes or judges anything.

“Write three ad headlines for Acme.”

The agent calls brand_get for Acme. It reads the body, and it sees the Assignees (the members who are accountable for the brand), the personas, the files and the attached ad accounts. You then get headlines in the voice of Acme, not generic headlines.

The job guide Describe a brand shows each step of the job.

Reference

Fetch a single brand by its slug: the full brand context (its body, one Markdown text), its websiteUrl if one is set, its assignees, plus its personas (summaries only — who the brand talks to), its documents (each with a URL) and the ad accounts attached to it. An unwritten body is null. websiteUrl is the brand’s public site. An Assignee is a current member of the organization who is accountable for the record. An Assignee has no extra access: every role with the write scope can still edit the record. Load a persona’s own context with persona_get. Echo the revision back as base_revision when updating.

Input

Argument Type Required Description
brand_name string yes The brand slug (its stable per-organization handle).

Output

A successful call returns this object in structuredContent.

Field Type Always present Description
advertisers array of object yes The ad accounts attached to the brand.
advertisers[].advertiserId string yes The ad account (acc_…).
advertisers[].createdAt number yes Milliseconds since the Unix epoch, in UTC.
advertisers[].provider string yes The provider of the ad account, such as meta. AdCrunch reads it from the ad account.
advertisers[].targetId string yes The id of the brand that the ad account is attached to.
advertisers[].targetType string yes The kind of record that the ad account is attached to: brand.
brand object yes The brand in full, with the members accountable for it.
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.
brand.assignees array of object yes The current members who are accountable for the record, oldest first, at most 10. An Assignee grants no access.
brand.assignees[].id string yes The usr_… id of the member.
brand.assignees[].name string yes The name of the member.
documents array of object yes The finalized files of the brand, each with its URL. The content of a file is not in the bundle.
documents[].createdAt number yes Milliseconds since the Unix epoch, in UTC.
documents[].filename string yes The name of the file at upload.
documents[].id string yes The id of the document (doc_…).
documents[].mimeType string yes The media type of the stored file. AdCrunch reads it from the file at finalize.
documents[].name string yes The display name. It is the filename until someone renames it.
documents[].sizeBytes number yes The size of the stored file, in bytes. AdCrunch reads it from the file at finalize.
documents[].targetId string yes The id of the brand that holds the document (brd_…).
documents[].targetType string yes The kind of record that holds the document: brand.
documents[].url string yes The public URL of the file. Each person who has the URL can read the file.
personas array of object yes The personas of the brand, newest first, with no prose.
personas[].ageMax integer, 0 to 120 or null yes The highest age of the audience. null when the range has no upper bound.
personas[].ageMin integer, 0 to 120 or null yes The lowest age of the audience. null when the range has no lower bound.
personas[].description string yes One line about the persona. An agent picks a persona on it.
personas[].name string yes The display name.
personas[].slug string yes The handle of the persona. It is unique in its brand, not in the organization. The tools take it as persona_name.
personas[].hasBody boolean yes true when the body holds text. Read the text with the get tool.

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_found
  • organization_unentitled
  • forbidden
  • invalid_request
  • internal_error

Scope

The token must hold brand:read. 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.

  • Read-only. The tool changes nothing.
  • Closed world. The tool reads and writes the data of AdCrunch only.

Example

The arguments:

{
  "brand_name": "acme"
}

The result, in structuredContent:

{
  "advertisers": [
    {
      "advertiserId": "acc_1203456789012345",
      "createdAt": 1790000000000,
      "provider": "meta",
      "targetId": "brd_6a9c33",
      "targetType": "brand"
    }
  ],
  "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": "doc_7d1f58",
    "name": "Acme",
    "revision": 4,
    "slug": "acme",
    "updatedAt": 1790086400000,
    "websiteUrl": "https://acme.example",
    "assignees": [
      {
        "id": "usr_4d8b12",
        "name": "Maya Lindqvist"
      }
    ]
  },
  "documents": [
    {
      "createdAt": 1790086400000,
      "filename": "acme-logo.png",
      "id": "doc_7d1f58",
      "mimeType": "image/png",
      "name": "acme-logo.png",
      "sizeBytes": 48213,
      "targetId": "brd_6a9c33",
      "targetType": "brand",
      "url": "https://documents.adcrunch.dev/org_3a7f10/doc_7d1f58"
    },
    {
      "createdAt": 1790000000000,
      "filename": "acme-brand-guidelines.pdf",
      "id": "doc_5e2b41",
      "mimeType": "application/pdf",
      "name": "acme-brand-guidelines.pdf",
      "sizeBytes": 1482064,
      "targetId": "brd_6a9c33",
      "targetType": "brand",
      "url": "https://documents.adcrunch.dev/org_3a7f10/doc_5e2b41"
    }
  ],
  "personas": [
    {
      "ageMax": 45,
      "ageMin": 28,
      "description": "Runners who already own a pair, and who buy the next one without looking at another brand.",
      "hasBody": true,
      "name": "Loyalists",
      "slug": "loyalists"
    }
  ]
}

Was this page helpful?