Docs

Assets

What it does

Assets give a marketing file a stable name and a version history, so a one-pager can be updated without losing the copy you already shared.

Open Assets (/assets). You create an asset identity, then add versions that point at a committed file. The bytes are a file row. The asset is the name, kind, and current version. Sharing is recorded. It is not sent. The content calendar is a different list on Content.

The screen is a thin client. Agents use the same file and asset tools, and the board shows the rows those tools write.

MCP tools

ToolScopeRole
file_reservefiles:writeReserve a file row and an upload URL, deduped by hash
file_commitfiles:writeMark the upload ready
file_signed_urlfiles:readShort-lived download URL
marketing_asset_createfiles:writeCreate the asset identity
marketing_asset_version_addfiles:writeAdd a version that points at a committed file
marketing_asset_listfiles:readList assets
marketing_asset_getfiles:readOne asset and its versions
marketing_asset_set_currentfiles:writePoint the asset at a version
file_linkfiles:writeLink a file to a record
files_for_entityfiles:readFiles on a record

file_share_record records a share. It does not deliver the file.

HTTP endpoints

MethodPathRole
GET, POST/cockpit/api/assetsList or create an asset
GET, PATCH/cockpit/api/assets/:idRead or update one asset
POST/cockpit/api/assets/:id/versionsAdd a version
POST/cockpit/api/assets/:id/currentSet the current version
GET/cockpit/api/brandsBrand picker on the create form
GET, POST/cockpit/api/filesFile metadata
GET/cockpit/api/files/:id/urlShort-lived download URL

Permissions

Token scopes come from one permission-set layer. Reads need files:read. Writes, including asset create and version add, need files:write. These writes are token-only on the MCP path. The screen uses the signed-in session.

Row access is RLS by creator. Admins see all rows. Members see their own.

Agent example

Call marketing_asset_create after file_commit has a file id, then add a version.

{
  "tool": "marketing_asset_create",
  "arguments": {
    "title": "Data quality one-pager",
    "slug": "data-quality-one-pager",
    "kind": "one-pager"
  }
}

Expected result: an asset row with no current file yet. marketing_asset_version_add with that asset id and a committed file_id attaches version 1. marketing_asset_list then returns the title. The bytes are never inlined in the tool result.

{
  "ok": true,
  "title": "Data quality one-pager",
  "slug": "data-quality-one-pager"
}