Skip to main content
Glama
cloud-ru-tech

mcp-server-mattermost

update_bookmark

Idempotent

Update a channel bookmark by changing only the fields you provide, such as display name, emoji, link, or image URL, while leaving other properties unchanged.

Instructions

Update a channel bookmark.

Partially updates bookmark properties. Only provided fields are updated; others remain unchanged.

Note: Requires Entry, Professional, Enterprise, or Enterprise Advanced edition (not available in Team Edition). Minimum version: v10.1.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
emojiNoNew emoji icon
link_urlNoNew URL
image_urlNoNew preview image URL
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
bookmark_idYes26-character bookmark identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
display_nameNoNew display name

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesUnique bookmark identifier
fileNoFile metadata for file bookmarks
typeYesBookmark type: 'link' or 'file'
emojiNoEmoji icon
file_idYesFile ID for file bookmarks (empty for links)
link_urlNoURL for link bookmarks
owner_idYesUser ID who created the bookmark
create_atYesCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if not deleted)
image_urlNoPreview image URL
parent_idNoParent bookmark ID
update_atYesLast update timestamp in milliseconds
channel_idYesChannel this bookmark belongs to
sort_orderYesPosition in bookmark list
original_idNoOriginal bookmark ID if copied
display_nameYesBookmark display name

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv0.6.1
    • addedOutput schema / properties / file
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "description": "Uploaded file metadata.\n\nNote: Go source uses CreatorId field name, but JSON response uses \"user_id\".\n\nSee: https://github.com/mattermost/mattermost/blob/master/server/public/model/file_info.go",
      +      "properties": {
      +        "channel_id": {
      +          "description": "Channel where file was uploaded",
      +          "type": "string"
      +        },
      +        "create_at": {
      +          "description": "Upload timestamp in milliseconds",
      +          "type": "integer"
      +        },
      +        "delete_at": {
      +          "description": "Deletion timestamp",
      +          "type": "integer"
      +        },
      +        "extension": {
      +          "description": "File extension without dot",
      +          "type": "string"
      +        },
      +        "has_preview_image": {
      +          "default": false,
      +          "description": "Has generated preview",
      +          "type": "boolean"
      +        },
      +        "height": {
      +          "default": 0,
      +          "description": "Image height in pixels",
      +          "type": "integer"
      +        },
      +        "id": {
      +          "description": "Unique file identifier",
      +          "type": "string"
      +        },
      +        "mime_type": {
      +          "description": "MIME type",
      +          "type": "string"
      +        },
      +        "name": {
      +          "description": "File name",
      +          "type": "string"
      +        },
      +        "post_id": {
      +          "default": "",
      +          "description": "Associated post ID",
      +          "type": "string"
      +        },
      +        "size": {
      +          "description": "File size in bytes",
      +          "type": "integer"
      +        },
      +        "update_at": {
      +          "description": "Last update timestamp",
      +          "type": "integer"
      +        },
      +        "user_id": {
      +          "description": "Uploader user identifier (CreatorId in Go)",
      +          "type": "string"
      +        },
      +        "width": {
      +          "default": 0,
      +          "description": "Image width in pixels",
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "user_id",
      +        "channel_id",
      +        "create_at",
      +        "update_at",
      +        "delete_at",
      +        "name",
      +        "extension",
      +        "size",
      +        "mime_type"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "File metadata for file bookmarks"
      +}
    • removedOutput schema / properties / file_info
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "additionalProperties": true,
      -      "type": "object"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "File metadata for file bookmarks"
      -}
  2. First observedv0.5.1

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as idempotent and non-destructive. The description adds key PATCH-like behavior: only provided fields are updated and others remain unchanged, plus edition/version constraints. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences with no filler. The core action is front-loaded, the partial-update semantics follow immediately, and the edition/version note is relevant and appropriately placed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter partial-update operation, the description covers the key semantics, prerequisites, and field-preservation behavior, while required parameters are documented in the schema. An output schema exists so return values needn't be described; minor gaps are lack of explicit permission/error conditions and null-clearing behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage with descriptions for all parameters, so the baseline is 3. The description adds value by clarifying that omitted fields are preserved, which is essential for correctly interpreting the optional parameters, though it doesn't explicitly explain null-vs-omitted semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific operation: updating a channel bookmark's properties via partial update. It distinguishes itself from create/delete/list by focusing on updating an existing bookmark's fields, though it doesn't explicitly contrast with the sibling update_bookmark_sort_order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for modifying existing bookmark properties and adds useful edition/version prerequisites, but it doesn't explicitly state when to prefer this over update_bookmark_sort_order or the create/delete/list siblings, nor does it state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.