Skip to main content
Glama
cloud-ru-tech

mcp-server-mattermost

mcp-server-mattermost

Let AI assistants read, search, and post in your Mattermost workspace

38 tools · Channels · Messages · Reactions · Threads · Files · Users

MCP Server PyPI version Docker Pulls Tests Python 3.10+ License: MIT Docs

Features

Channels — list, create, join, manage channels and DMs Messages — send, search, edit, delete with rich attachments Reactions & Threads — emoji reactions, pins, full thread history Users & Teams — lookup, search, status Files — upload, metadata, download links Bookmarks — save links and files in channels (Entry+ edition)

Related MCP server: Slack MCP Server

Example Queries

Once configured, you can ask your AI assistant:

  • "List all channels and find where the deployment discussion is happening"

  • "What did I miss in #engineering since yesterday morning?"

  • "Show me my unread channels and summarize the threads I was mentioned in"

  • "Send a build status alert to #engineering with a red attachment"

  • "Search for messages about the outage last week and summarize"

  • "Summarize this thread and post the key decisions"

  • "Find who worked on the authentication bug last week"

  • "Upload the report.pdf to #general and share the link"

Available Tools

Tool

Description

Key Parameters

list_public_channels

List public channels in a team

team_id

list_my_channels

List your channels with unread counts

team_id ✓, only_unread

get_channel

Get channel details by ID

channel_id

get_channel_by_name

Get channel by name

team_id, channel_name

create_channel

Create a new channel

team_id, name, display_name

join_channel

Join a public channel

channel_id

leave_channel

Leave a channel

channel_id

mark_channel_viewed

Mark a channel as viewed (reset unread counters)

channel_id

get_channel_members

List channel members

channel_id

add_user_to_channel

Add user to channel

channel_id, user_id

create_direct_channel

Create DM channel

user_id_1, user_id_2

Tool

Description

Key Parameters

post_message

Send a message to a channel

channel_id, message ✓, attachments

get_channel_messages

Get messages: recent, unread window, or since timestamp

channel_id ✓, unread_only, since

search_messages

Search messages by term

team_id, terms

update_message

Edit a message

post_id, message ✓, attachments

delete_message

Delete a message

post_id

Tool

Description

Key Parameters

add_reaction

Add emoji reaction

post_id, emoji_name

remove_reaction

Remove emoji reaction

post_id, emoji_name

get_reactions

Get all reactions on a post

post_id

pin_message

Pin a message

post_id

unpin_message

Unpin a message

post_id

get_thread

Get thread messages

post_id

Tool

Description

Key Parameters

get_me

Get current user info

get_user

Get user by ID

user_id

get_user_by_username

Get user by username

username

search_users

Search users

term

get_user_status

Get online status

user_id

Tool

Description

Key Parameters

list_teams

List your teams

get_team

Get team details

team_id

get_team_members

List team members

team_id

Tool

Description

Key Parameters

upload_file

Upload a file

channel_id, file_path

get_file_info

Get file metadata

file_id

get_file_link

Get download link

file_id

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

Tool

Description

Key Parameters

list_bookmarks

List channel bookmarks

channel_id

create_bookmark

Create link or file bookmark

channel_id, display_name, bookmark_type

update_bookmark

Update bookmark properties

channel_id, bookmark_id

delete_bookmark

Delete a bookmark

channel_id, bookmark_id

update_bookmark_sort_order

Reorder bookmark

channel_id, bookmark_id, new_sort_order

Quick Start

  1. Get a Mattermost bot token

  2. Add to your MCP client config:

{
  "mcpServers": {
    "mattermost": {
      "command": "uvx",
      "args": ["mcp-server-mattermost"],
      "env": {
        "MATTERMOST_URL": "https://your-server.com",
        "MATTERMOST_TOKEN": "your-token"
      }
    }
  }
}
  1. Restart your client

Full setup guide — Claude Desktop, Cursor, Claude Code, Opencode, Docker, pip

Configuration

Variable

Required

Default

Description

MATTERMOST_URL

Yes

Mattermost server URL

MATTERMOST_AUTH_MODE

No

static_token

Auth mode: static_token, client_token, or oauth_proxy

MATTERMOST_TOKEN

Conditional

Bot or personal token. Required for static_token.

MATTERMOST_TIMEOUT

No

30

Request timeout in seconds

MATTERMOST_MAX_RETRIES

No

3

Max retry attempts

MATTERMOST_VERIFY_SSL

No

true

Verify SSL certificates

MATTERMOST_MAX_CONNECTIONS

No

100

Max HTTP connections in the shared pool

MATTERMOST_MAX_KEEPALIVE_CONNECTIONS

No

20

Max idle keepalive connections, clamped to max connections

MATTERMOST_KEEPALIVE_EXPIRY

No

30.0

Idle keepalive connection lifetime in seconds

MATTERMOST_EXTRA_CA_CERTS

No

Path to extra PEM CAs appended to the default trust store

MATTERMOST_LOG_LEVEL

No

INFO

Logging level

MATTERMOST_LOG_FORMAT

No

json

Log output format: json or text

MATTERMOST_API_VERSION

No

v4

Mattermost API version

For client_token and oauth_proxy modes — including Mattermost OAuth App registration, all MATTERMOST_OAUTH_* settings, and MCP client connection — see Authentication.

Docker

Stdio mode (default)

docker run -i --rm \
  -e MATTERMOST_URL=https://your-mattermost.com \
  -e MATTERMOST_TOKEN=your-token \
  legard/mcp-server-mattermost
{
  "mcpServers": {
    "mattermost": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MATTERMOST_URL=https://your-mattermost.com",
        "-e", "MATTERMOST_TOKEN=your-token",
        "legard/mcp-server-mattermost"
      ]
    }
  }
}

HTTP mode (production)

For networked HTTP use per-client auth. static_token over HTTP serves an unauthenticated endpoint acting with the shared token (the server starts but logs a loud warning) — see Authentication → HTTP transport.

docker run -d -p 8000:8000 \
  -e MCP_TRANSPORT=http \
  -e MCP_HOST=0.0.0.0 \
  -e MATTERMOST_AUTH_MODE=client_token \
  -e MATTERMOST_URL=https://your-mattermost.com \
  -e MATTERMOST_HTTP_HOST_ORIGIN_PROTECTION=auto \
  -e MATTERMOST_HTTP_ALLOWED_HOSTS=mcp.example.com \
  legard/mcp-server-mattermost

client_token means each MCP client authenticates with its own Mattermost token, sent as Authorization: Bearer <token> — a client configured without one gets 401. The two MATTERMOST_HTTP_* variables turn on Host/Origin (DNS-rebinding) protection, which is off by default; see HTTP transport security.

Health check: curl http://localhost:8000/health

HTTP mode with Mattermost OAuth proxy

Register a Mattermost OAuth 2.0 Application first:

Mattermost field

Production value

Is Trusted

Yes

Is Public Client

No

Callback URLs

https://mcp.example.com/oauth/callback/mm

Then run the MCP server:

docker run -d -p 8000:8000 \
  -e MCP_TRANSPORT=http \
  -e MCP_HOST=0.0.0.0 \
  -e MATTERMOST_AUTH_MODE=oauth_proxy \
  -e MATTERMOST_URL=https://mattermost.internal \
  -e MATTERMOST_OAUTH_MATTERMOST_PUBLIC_URL=https://mattermost.example.com \
  -e MATTERMOST_OAUTH_MCP_PUBLIC_URL=https://mcp.example.com \
  -e MATTERMOST_OAUTH_CLIENT_ID=your-mattermost-oauth-app-id \
  -e MATTERMOST_OAUTH_CLIENT_TYPE=confidential \
  -e MATTERMOST_OAUTH_CLIENT_SECRET=your-mattermost-oauth-app-secret \
  legard/mcp-server-mattermost

If your Mattermost login uses Keycloak SSO, users authenticate through Keycloak inside the Mattermost OAuth login flow. The MCP server does not need a Keycloak client.

Connect Claude Code with Dynamic Client Registration:

claude mcp add --transport http mattermost https://mcp.example.com/mcp

Do not pass --client-id for this server; the MCP client registers with the MCP server, and the MCP server uses the fixed Mattermost OAuth App upstream.

Environment Variables (Docker)

Variable

Default

Description

MCP_TRANSPORT

stdio

Transport: stdio or http

MCP_HOST

127.0.0.1

HTTP bind host (use 0.0.0.0 in Docker)

MCP_PORT

8000

HTTP port

Documentation

📖 mcp-server-mattermost.readthedocs.io

Development

# Clone and install
git clone https://github.com/cloud-ru-tech/mcp-server-mattermost
cd mcp-server-mattermost
uv sync --dev

# Run unit tests
uv run pytest

# Run integration tests (requires Docker or external Mattermost)
uv run pytest tests/integration -v

# Type checking
uv run mypy src/

# Linting
uv run ruff check src/ tests/

# Run locally
MATTERMOST_URL=https://... MATTERMOST_TOKEN=... uv run mcp-server-mattermost

Integration Tests

Integration tests run against a real Mattermost server via Docker (Testcontainers) or external server.

# With Docker (Testcontainers) — automatic setup
uv run pytest tests/integration -v

# Against external Mattermost server
export MATTERMOST_URL=https://your-server.com
export MATTERMOST_TOKEN=your-bot-token
uv run pytest tests/integration -v

# Run specific test module
uv run pytest tests/integration/test_channels.py -v

Integration tests are excluded from the default pytest run. Unit tests run with:

uv run pytest  # Unit tests only

Debugging

Use the MCP Inspector to debug:

npx @modelcontextprotocol/inspector uvx mcp-server-mattermost

Contributing

Contributions welcome! See CONTRIBUTING.md for guidelines.

License

MIT — see LICENSE for details.


Built with FastMCP · Mattermost API v4

Available Tools

38 tools
add_reactionA
Idempotent

Add an emoji reaction to a message.

Adds a reaction from the authenticated user. Common emojis: thumbsup, thumbsdown, smile, heart, eyes. Adding the same reaction twice has no additional effect.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes26-character post/message identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
emoji_nameYesEmoji name without colons (e.g., 'thumbsup', 'smile')

Output Schema

ParametersJSON Schema
NameRequiredDescription
post_idYesPost that was reacted to
user_idYesUser who reacted
create_atYesReaction timestamp
emoji_nameYesEmoji name without colons

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate idempotent and non-destructive behavior. Description adds detail that adding the same reaction twice has no effect, reinforcing idempotency. Also notes the action is by the authenticated user, which is useful context.

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?

Three concise sentences, front-loaded with the primary action. No unnecessary words, every sentence adds value.

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?

Given the presence of an output schema and annotations, the description covers key behavioral aspects like idempotency and common usage. Could briefly mention the response, but output schema likely handles that.

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

Parameters3/5

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

Input schema provides 100% coverage with clear descriptions for both parameters. Description adds a list of common emojis and format notes, but this is supplementary and not essential. Baseline 3 is appropriate.

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

Purpose5/5

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

Clearly states the verb 'Add' and resource 'emoji reaction to a message', specifying it's from the authenticated user. Differentiates from sibling tools like 'remove_reaction'.

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

Usage Guidelines4/5

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

Implicitly identifies when to use (to add a reaction), and by listing common emojis provides practical guidance. Does not explicitly state when not to use or mention alternatives, but it's clear enough.

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

add_user_to_channelA
Idempotent

Add a user to a channel.

Requires permission to manage channel members. Adding a user who is already in the channel has no additional effect.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes26-character user identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
rolesYesSpace-separated role names
user_idYesUser identifier
msg_countYesMessages seen count, including replies in threads
channel_idYesChannel identifier
mention_countYesUnread @-mentions count, including thread replies
last_update_atYesLast update timestamp
last_viewed_atYesLast viewed timestamp
msg_count_rootYesRoot messages seen count, excluding thread replies
mention_count_rootYesUnread root @-mentions count, excluding thread replies

TDQS

A4.3/5.0
Behavior4/5

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

Annotations indicate idempotency and non-destructiveness. The description adds behavioral detail: 'Adding a user who is already in the channel has no additional effect,' reinforcing idempotency without contradicting 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 concise with two short sentences, each adding essential information without redundancy. It is well-structured and front-loaded.

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

Completeness5/5

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

Given the presence of an output schema and clear annotations, the description adequately covers purpose, permissions, and behavioral effects. No additional context is needed.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for both parameters. The description does not add additional meaning beyond what the schema already provides, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Add a user to a channel') with a specific verb and resource. It distinguishes from sibling tools like 'join_channel' (self-join) and 'leave_channel', providing clear purpose.

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

Usage Guidelines4/5

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

The description mentions a prerequisite ('Requires permission to manage channel members'), guiding the agent on when this tool is appropriate. It doesn't explicitly state when not to use it, but the condition is clear.

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

create_bookmarkA

Create a channel bookmark.

Creates a link bookmark (URL) or file bookmark (attached file). For link type, link_url is required. For file type, file_id is required (from upload_file).

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

ParametersJSON Schema
NameRequiredDescriptionDefault
emojiNoEmoji icon
file_idNoFile ID (required for file type)
link_urlNoURL (required for link type)
image_urlNoPreview image URL
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
display_nameYesBookmark display name
bookmark_typeYesBookmark type: 'link' or 'file'

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique bookmark identifier
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)
file_infoNoFile metadata for file bookmarks
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

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses that this is a creation operation (non-destructive, consistent with destructiveHint=false). It adds context about dependencies (file_id from upload_file) and edition/version limitations, enhancing transparency beyond minimal 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 concise: two short paragraphs with clear front-loading of the purpose. Every sentence adds necessary information without redundancy or fluff.

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?

Given the 7 parameters, 3 required, and presence of an output schema, the description adequately covers creation details. It explains type-specific requirements and edition/version constraints, though it could optionally mention that the bookmark is created in the specified channel.

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?

All 7 parameters are described in the schema (100% coverage). The description adds value by clarifying the conditional requirements for link_url and file_id based on bookmark_type, which goes beyond the schema's individual property descriptions.

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

Purpose5/5

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

The description clearly states 'Create a channel bookmark' and distinguishes between link and file bookmark types, making the purpose unambiguous. Compared to sibling tools like list_bookmarks or delete_bookmark, the action is well-defined.

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

Usage Guidelines4/5

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

The description provides usage conditions: for link type require link_url, for file type require file_id from upload_file. It also notes edition and version requirements. However, it does not explicitly state when not to use this tool or suggest alternatives among siblings.

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

create_channelA

Create a new channel in a team.

Creates either a public (O) or private (P) channel. The authenticated user becomes the channel admin. Each call creates a new channel; use get_channel_by_name to check if it exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesChannel name (lowercase, no spaces)
headerNoChannel header
purposeNoChannel purpose
team_idYes26-character team identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
channel_typeNoChannel type: O=public, P=private, D=direct message, G=group messageO
display_nameYesHuman-readable channel name

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique channel identifier
nameYesURL-friendly channel name
typeYesChannel type: O=public, P=private, D=direct, G=group
headerYesChannel header text
purposeYesChannel purpose description
team_idYesTeam this channel belongs to
create_atYesCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if not deleted)
update_atYesLast update timestamp in milliseconds
creator_idYesUser ID who created the channel
display_nameYesHuman-readable channel name
last_post_atYesTimestamp of last post
total_msg_countYesTotal message count

TDQS

A4.2/5.0
Behavior4/5

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

The description adds behavioral context beyond the annotations: the authenticated user becomes admin, and each call creates a new channel (non-idempotent). It correctly notes O and P types, though the schema includes D and G. No contradiction with destructiveHint=false.

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?

Three concise sentences, each adding value: purpose, channel types, admin and idempotency guidance. No filler.

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?

Given the tool's complexity (6 params, schema coverage 100%, output schema exists), the description covers key behaviors and provides a useful check-idempotency tip. Slightly incomplete by not mentioning output structure, but output schema handles that.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds contextual insight (admin, idempotency) but does not elaborate on specific parameters beyond the schema's descriptions.

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

Purpose5/5

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

The description clearly states the verb 'Create' and the resource 'a new channel in a team'. It distinguishes from siblings by specifying channel types (public/private) and notes the user becomes admin, which differentiates from other channel creation tools like create_direct_channel.

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

Usage Guidelines4/5

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

The description advises using get_channel_by_name to check existence, which guides against duplicates. However, it does not mention when not to use this tool (e.g., for direct channels) or prerequisites like team membership, leaving some gaps.

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

create_direct_channelA
Idempotent

Create a direct message channel between two users.

Returns an existing DM channel if one already exists between the users. Use this to get a channel ID for sending private messages. Then use post_message with the returned channel_id to send messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_id_1Yes26-character user identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
user_id_2Yes26-character user identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique channel identifier
nameYesURL-friendly channel name
typeYesChannel type: O=public, P=private, D=direct, G=group
headerYesChannel header text
purposeYesChannel purpose description
team_idYesTeam this channel belongs to
create_atYesCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if not deleted)
update_atYesLast update timestamp in milliseconds
creator_idYesUser ID who created the channel
display_nameYesHuman-readable channel name
last_post_atYesTimestamp of last post
total_msg_countYesTotal message count

TDQS

A4.3/5.0
Behavior4/5

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

The description aligns with the idempotentHint annotation by stating 'Returns an existing DM channel if one already exists.' It adds behavioral context beyond annotations, clarifying the tool is non-destructive and suitable for private messaging.

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?

Three concise sentences front-loaded with the primary purpose, followed by key behaviors and usage guidance. No redundant information.

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

Completeness5/5

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

Given the simple input schema (2 params), annotations (idempotent, non-destructive), and output schema presence, the description fully covers the tool's purpose, idempotency, and next-step guidance (use post_message).

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

Parameters3/5

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

The input schema already provides 100% coverage with clear descriptions for both user IDs, including examples. The tool description adds no additional parameter semantics beyond what the schema provides, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool creates a direct message channel between two users and distinguishes itself from siblings like 'create_channel' by specifying the DM nature and the idempotent behavior of returning an existing channel.

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

Usage Guidelines4/5

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

The description tells when to use it (to get a channel ID for private messages) and implicitly guides not to use it when a channel already exists by mentioning the return of existing DMs. It could explicitly contrast with sibling tools but is still effective.

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

delete_bookmarkA

Delete a channel bookmark.

Archives the bookmark (soft delete via delete_at timestamp). The bookmark will no longer appear in the channel.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
bookmark_idYes26-character bookmark identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique bookmark identifier
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)
file_infoNoFile metadata for file bookmarks
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

TDQS

A4.5/5.0
Behavior5/5

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

Since no annotations are provided, the description fully discloses the soft-delete mechanism ('Archives the bookmark (soft delete via delete_at timestamp)') and the effect ('will no longer appear in the channel'). No contradictions or gaps.

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?

Description is concise (3 sentences + note), front-loaded with the core action, and every sentence adds value. No redundant information.

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

Completeness5/5

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

For a simple delete tool with 2 parameters and an output schema, the description is complete: it explains the action, behavior (soft delete), version/edition requirements, and effect on the UI. No missing information given the tool's complexity.

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

Parameters3/5

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

Input schema covers both parameters with full descriptions (channel_id and bookmark_id). The description adds no additional parameter semantics beyond what the schema already provides, so baseline score of 3 is appropriate.

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

Purpose5/5

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

Description clearly states 'Delete a channel bookmark' and explains soft-delete behavior. It distinguishes from sibling tools like update_bookmark and list_bookmarks by specifying the delete action and archival behavior.

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

Usage Guidelines4/5

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

Includes edition requirements (Entry, Professional, Enterprise, Advanced) and minimum version (v10.1), explicitly excluding Team Edition. This provides clear context for when the tool is available. However, it does not explicitly compare to alternatives like update_bookmark or permanent delete, though soft-delete is noted.

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

delete_messageA

Delete a message permanently.

Can only delete your own messages (unless admin). Deleted messages cannot be recovered. All reactions and thread context will be lost.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes26-character post/message identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

TDQS

A4.5/5.0
Behavior5/5

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

Fully describes permanent deletion, permission restrictions, and side effects (loss of reactions and thread context). No annotations, so description carries full burden and does so thoroughly.

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?

Three concise sentences with front-loaded action verb. No wasted words; each sentence adds essential information.

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

Completeness5/5

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

For a simple delete operation with one parameter, the description covers permissions, permanence, and side effects. No output schema needed, and no gaps remain.

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

Parameters3/5

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

Schema coverage is 100%, and the description does not add further meaning to the post_id parameter beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose5/5

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

Clearly states 'Delete a message permanently' as the core action, with specific verb and resource. Distinguishes from siblings like update_message or pin_message.

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

Usage Guidelines4/5

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

Specifies that only own messages can be deleted unless admin, providing clear context. Mentions irreversibility and loss of reactions/thread context, guiding when not to use. No explicit alternative comparison.

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

get_channelA
Read-onlyIdempotent

Get detailed information about a specific channel.

Returns channel metadata including name, purpose, header, and member count. Use when you have the channel ID. For lookup by channel name, use get_channel_by_name instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique channel identifier
nameYesURL-friendly channel name
typeYesChannel type: O=public, P=private, D=direct, G=group
headerYesChannel header text
purposeYesChannel purpose description
team_idYesTeam this channel belongs to
create_atYesCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if not deleted)
update_atYesLast update timestamp in milliseconds
creator_idYesUser ID who created the channel
display_nameYesHuman-readable channel name
last_post_atYesTimestamp of last post
total_msg_countYesTotal message count

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare idempotent and read-only; description adds value by specifying returned fields (name, purpose, header, member count) without contradicting 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?

Three sentences, front-loaded with purpose, then return info, then usage guidance. No redundant or tangential content.

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?

With output schema present, description adequately covers need; hints at returned fields and is sufficient for a simple lookup tool.

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

Parameters3/5

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

Schema coverage is 100% with clear parameter description; description reinforces purpose but adds minimal new information beyond schema.

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

Purpose5/5

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

Description uses specific verb+resource ('Get detailed information about a specific channel') and explicitly distinguishes from sibling tool 'get_channel_by_name', making purpose unambiguous.

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

Usage Guidelines5/5

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

Provides explicit usage condition ('Use when you have the channel ID') and directs to alternative for name lookup, giving clear decision guidance.

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

get_channel_by_nameA
Read-onlyIdempotent

Get a channel by its name within a team.

Returns channel metadata including name, purpose, header, and member count. Use when you know the channel name but not the ID. For lookup by ID, use get_channel instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idYes26-character team identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
channel_nameYesChannel name (lowercase, no spaces)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique channel identifier
nameYesURL-friendly channel name
typeYesChannel type: O=public, P=private, D=direct, G=group
headerYesChannel header text
purposeYesChannel purpose description
team_idYesTeam this channel belongs to
create_atYesCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if not deleted)
update_atYesLast update timestamp in milliseconds
creator_idYesUser ID who created the channel
display_nameYesHuman-readable channel name
last_post_atYesTimestamp of last post
total_msg_countYesTotal message count

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. Description adds return field context (name, purpose, header, member count) consistent with read-only behavior.

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?

Three concise sentences, front-loaded with purpose, no redundancy. Every sentence earns its place.

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

Completeness5/5

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

Given simplicity, annotations, and output schema, description provides sufficient context for selection and invocation.

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?

Schema covers 100% of parameters with descriptions. Description adds value by hinting at return fields, though schema already details parameters.

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

Purpose5/5

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

Description clearly states the tool gets a channel by name, returns metadata, and distinguishes from get_channel by ID lookup. Specific verb-resource pair.

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

Usage Guidelines5/5

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

Explicitly states when to use (know name, not ID) and when not (use get_channel for ID lookup), providing clear guidance.

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

get_channel_membersA
Read-onlyIdempotent

Get members of a channel.

Returns list of users who are members of the channel. Use to see who can receive messages in a channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (0-indexed)
per_pageNoResults per page
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, establishing safe read behavior. The description adds that it returns a list of users, which is useful but does not disclose additional traits like pagination behavior or rate limits. The description is adequate but not rich beyond 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?

Three sentences, no filler. The key action and purpose are front-loaded: 'Get members of a channel.' Every sentence adds value without repetition.

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?

Given the existence of an output schema (context signal), the description need not detail return values. It explains the primary function and use case. Minor gap: does not mention pagination explicitly, but the schema handles that. Overall, complete for a read operation with well-documented parameters.

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

Parameters3/5

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

All three parameters have descriptions in the input schema (100% coverage), so the schema already explains them. The tool description does not add meaning beyond what the schema provides, earning the baseline score of 3.

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

Purpose5/5

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

The description clearly states 'Get members of a channel' and explains the resource (members) and action (get). It distinguishes itself from siblings like 'add_user_to_channel' by focusing on reading membership rather than modifying it.

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

Usage Guidelines4/5

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

The description provides a use case: 'Use to see who can receive messages in a channel.' This helps the agent understand when to invoke the tool. However, it does not explicitly exclude scenarios or mention alternatives among siblings.

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

get_channel_messagesA
Read-onlyIdempotent

Get messages from a channel — recent history, the user's unread window, or posts changed since a watermark.

Three mutually-exclusive modes. Pick by user intent:

  • "Show last N" / "what's in this channel" → default (page, per_page). Reverse-chronological. truncated=True ⇒ more posts exist; paginate.

  • "What did I miss" → unread_only=True. The user's unread window anchored at last_viewed_at, with limit_before context posts. Quirk: on a never-viewed channel (last_viewed_at == 0) order is empty even when unread_msg_count > 0 — call mark_channel_viewed once to bootstrap.

  • "Sync everything since " → since=<unix_ms>. Posts with update_at > since, including edits of older posts and tombstones (delete_at != 0, empty message). Server caps at 1000; on truncated=True step the watermark forward in smaller windows.

Returns {order, posts, truncated}. posts may contain more entries than order (root posts pulled in by thread replies). System posts (type starts with "system_") appear in unread_only/since responses but are NOT counted in unread_msg_count.

For keyword search use search_messages; for full threads use get_thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (0-indexed)
sinceNoUnix timestamp in milliseconds (>= 10^12, i.e. >= 2001-01-01); return posts modified after this time. Mutually exclusive with unread_only and pagination. Use ChannelWithUnreads.last_viewed_at from list_my_channels.
per_pageNoResults per page
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
limit_afterNoIn unread_only mode: unread posts to return (1-200)
unread_onlyNoReturn only the user's unread window via /posts/unread
limit_beforeNoIn unread_only mode: read context posts before the first unread (max 200)
collapsed_threadsNoSet True only if the user has CRT (Collapsed Reply Threads) enabled. Team default is CRT off — leave False unless you know otherwise. Requires unread_only=True or since=<ms>; the default /posts endpoint rejects CRT-aware queries.

Output Schema

ParametersJSON Schema
NameRequiredDescription
orderYesPost IDs in display order
postsYesMap of post ID to Post object
truncatedNoTrue when the response hit a Mattermost response cap — more posts exist beyond this batch
next_post_idNoNext post ID for pagination
prev_post_idNoPrevious post ID for pagination

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare readOnlyHint and idempotentHint. The description adds extensive behavioral details: quirk about never-viewed channel, server cap at 1000 for since, truncated flag, system posts behavior, and that posts may contain more entries than order. No contradictions.

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

Conciseness4/5

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

The description is well-structured with clear sections for modes, but slightly long. Every sentence provides value, so it earns its length. Minor reduction for not being more concise.

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

Completeness5/5

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

Given the tool's complexity (8 parameters, 3 modes, quirks), the description is thorough. Output schema exists, so return values need not be explained. Covers all necessary context for effective use.

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?

Schema coverage is 100%, but the description adds meaning by explaining parameter interactions (mutual exclusivity of unread_only and since with pagination) and specific guidance for collapsed_threads. This goes beyond schema commentary.

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

Purpose5/5

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

The description clearly states the tool retrieves messages from a channel and lists three mutually exclusive modes. It differentiates from sibling tools like search_messages and get_thread by specifying their purposes.

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

Usage Guidelines5/5

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

Explicitly tells when to use each mode (default for recent history, unread_only for missed posts, since for syncing), and warns about CRT usage. Also directs to search_messages for keyword search and get_thread for full threads.

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

get_file_infoA
Read-onlyIdempotent

Get metadata about an uploaded file.

Returns file name, size, type, and upload information. Use to check file details before downloading or sharing.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_idYes26-character file identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique file identifier
nameYesFile name
sizeYesFile size in bytes
widthNoImage width in pixels
heightNoImage height in pixels
post_idNoAssociated post ID
user_idYesUploader user identifier (CreatorId in Go)
create_atYesUpload timestamp in milliseconds
delete_atYesDeletion timestamp
extensionYesFile extension without dot
mime_typeYesMIME type
update_atYesLast update timestamp
channel_idYesChannel where file was uploaded
has_preview_imageNoHas generated preview

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description adds minimal behavioral context beyond listing returned fields. No additional traits like auth requirements or performance implications are noted.

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?

Two sentences: first states purpose, second summarizes return values and use case. Every word is informative, no redundancy.

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

Completeness5/5

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

With an output schema present, the description doesn't need to detail return structure. It lists key fields, covers the single parameter, and provides usage context. Complete for a simple read-only tool.

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

Parameters3/5

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

Schema coverage is 100% with a detailed description including format example. The description does not add new parameter semantics beyond what the schema provides, so baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states it gets metadata about an uploaded file and lists specific return fields (name, size, type, upload information). This distinguishes it from siblings like get_file_link and upload_file.

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

Usage Guidelines4/5

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

Description provides explicit use case: 'Use to check file details before downloading or sharing.' It implicitly suggests when not to use (e.g., for downloading, use get_file_link), but doesn't state exclusions explicitly.

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

get_meA
Read-onlyIdempotent

Get the current authenticated user's profile.

Returns user information including username, email, and status. Use to get your own user ID for operations like create_direct_channel.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique user identifier
emailYesEmail address
rolesYesSpace-separated system roles
localeYesUser locale preference
nicknameYesNickname
usernameYesUnique username
create_atNoCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if active)
last_nameYesLast name
update_atNoLast update timestamp in milliseconds
first_nameYesFirst name
mfa_activeNoMulti-factor auth enabled
auth_serviceYesAuthentication service
email_verifiedNoEmail verification status
last_picture_updateNoLast avatar update timestamp
last_password_updateNoLast password change timestamp

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description adds value by specifying return fields (username, email, status). No contradictions; the description complements 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?

Three concise sentences, front-loaded with the core purpose. Every sentence adds value: purpose, return info, and a usage example. No fluff.

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

Completeness5/5

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

For a simple zero-parameter, read-only tool with rich annotations and explicit return info, the description is fully complete. It covers purpose, usage, and what to expect, leaving no gaps.

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?

Input schema has zero parameters, so baseline 4 applies. The description adds no parameter details (not needed), but it does provide context on what the return data includes, which is useful beyond the empty schema.

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

Purpose5/5

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

The description clearly states 'Get the current authenticated user's profile' with specific verb and resource. It distinguishes from siblings like get_user and get_user_by_username by focusing on the authenticated user, and explicitly mentions using it to get your own user ID for operations like create_direct_channel.

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

Usage Guidelines4/5

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

The description provides a clear use case: 'Use to get your own user ID for operations like create_direct_channel.' While it doesn't explicitly state when not to use it or name alternatives, the context implies for current user only, which is sufficient for this simple tool.

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

get_reactionsA
Read-onlyIdempotent

Get all reactions on a message.

Returns list of reactions with emoji names and user IDs. Use to see who reacted to a message and with what emoji.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes26-character post/message identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint; the description adds that it returns a list with emoji names and user IDs, which is useful but not extensive.

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?

Three sentences, front-loaded with the action and resource, no wasted words.

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

Completeness5/5

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

For a simple read tool with one required parameter, annotations, and an output schema, the description covers purpose, usage, and return format adequately.

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

Parameters3/5

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

The schema description of post_id is thorough (including example), and the tool description adds no extra parameter-specific information, so baseline 3 is appropriate with 100% schema coverage.

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

Purpose5/5

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

The description clearly states 'Get all reactions on a message' with a specific verb and resource, and distinguishes from sibling tools like add_reaction and remove_reaction by indicating it retrieves reactions.

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

Usage Guidelines4/5

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

The description says 'Use to see who reacted to a message and with what emoji,' providing clear context for when to invoke the tool, but does not mention exclusions or alternatives like get_channel_messages.

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

get_teamA
Read-onlyIdempotent

Get team details by ID.

Returns team name, description, and settings. Use when you have the team ID and need detailed information.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idYes26-character team identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique team identifier
nameYesURL-friendly team name
typeYesTeam type: O=open, I=invite-only
emailYesTeam contact email
create_atYesCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if active)
invite_idYesInvite link identifier
update_atYesLast update timestamp in milliseconds
descriptionYesTeam description
display_nameYesHuman-readable team name
allowed_domainsYesAllowed email domains
allow_open_inviteYesAllow public joining

TDQS

A4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint and idempotentHint. Description adds return value details (name, description, settings) but no additional behavioral context.

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?

Two sentences, no redundancy, efficient and front-loaded.

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?

Covers purpose, usage, and return fields. With output schema present, return is adequate. Missing error handling or prerequisites, but low complexity.

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

Parameters3/5

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

Schema coverage is 100%, so description adds no extra meaning beyond 'by ID'. Baseline of 3 applies.

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

Purpose5/5

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

Clearly states 'Get team details by ID' and lists return fields. Distinguishes from siblings like list_teams and get_team_members.

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

Usage Guidelines4/5

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

Explicitly says 'Use when you have the team ID and need detailed information.' Implies not to use without ID, but does not explicitly name alternatives.

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

get_team_membersA
Read-onlyIdempotent

Get members of a team.

Returns list of users who belong to the team. Use to discover users before sending direct messages or mentions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (0-indexed)
team_idYes26-character team identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
per_pageNoResults per page

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so safety is clear. The description adds that it returns a list of users, but does not disclose pagination behavior (parameters exist) or any potential limitations (e.g., team membership visibility). With annotations present, the bar is lower, but the description misses the nuance of paginated results.

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?

Three sentences, each with clear purpose: purpose, output, and use case. No wasted words, and the most critical information is front-loaded.

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?

Given the tool has an output schema (so return values need not be detailed), the description sufficiently covers purpose and usage. However, it omits mention of pagination behavior, which is relevant given the cursor parameters. Still, for a simple read operation, it is adequately complete.

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

Parameters3/5

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

Input schema has 100% description coverage, including details like team_id format and pagination parameters. The description adds no additional parameter semantics beyond what the schema already provides, so baseline score applies.

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

Purpose5/5

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

Clear verb ('get') and resource ('team members'). Description explicitly states it returns a list of users belonging to a team and provides a concrete use case ('discover users before sending direct messages or mentions'), distinguishing it from sibling member-list tools like get_channel_members.

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

Usage Guidelines4/5

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

Description includes a use case ('discover users before sending direct messages or mentions'), which guides when to use. However, it does not explicitly mention when not to use or contrast with alternatives, though the context from sibling names provides some implicit differentiation.

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

get_threadA
Read-onlyIdempotent

Get all messages in a thread.

Returns the root post and all replies in chronological order. Use to read full conversation context before replying.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes26-character post/message identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
orderYesPost IDs in display order
postsYesMap of post ID to Post object
truncatedNoTrue when the response hit a Mattermost response cap — more posts exist beyond this batch
next_post_idNoNext post ID for pagination
prev_post_idNoPrevious post ID for pagination

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description adds specificity about returning messages in chronological order, which is beyond 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?

Three short sentences, each with clear purpose. No fluff, front-loaded with the primary action.

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

Completeness5/5

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

Given the single parameter, comprehensive annotations, and presence of an output schema, the description sufficiently covers behavioral and usage aspects.

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

Parameters3/5

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

Schema description coverage is 100% with clear parameter info. The description does not add additional parameter details beyond the schema, so baseline score applies.

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

Purpose5/5

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

The description clearly states it gets all messages in a thread, distinguishing it from sibling tools like get_channel_messages. It specifically mentions returning root post and replies, and advises when to use it.

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

Usage Guidelines4/5

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

Explicitly suggests using it to read full conversation context before replying, providing a clear usage scenario. Does not mention when not to use or alternatives, but context is sufficient.

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

get_userA
Read-onlyIdempotent

Get a user's profile by their ID.

Returns user information including username, email, and status. Use when you have the user ID. For lookup by @username, use get_user_by_username instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes26-character user identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique user identifier
emailYesEmail address
rolesYesSpace-separated system roles
localeYesUser locale preference
nicknameYesNickname
usernameYesUnique username
create_atNoCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if active)
last_nameYesLast name
update_atNoLast update timestamp in milliseconds
first_nameYesFirst name
mfa_activeNoMulti-factor auth enabled
auth_serviceYesAuthentication service
email_verifiedNoEmail verification status
last_picture_updateNoLast avatar update timestamp
last_password_updateNoLast password change timestamp

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already provide readOnlyHint and idempotentHint. The description adds return fields (username, email, status) but no new behavioral traits beyond what annotations indicate. It does not contradict 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?

Three concise sentences front-loaded with main purpose, no filler, each sentence adds essential information.

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

Completeness5/5

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

Given single parameter, comprehensive annotations, and output schema, the description fully covers what an agent needs: action, input, output, and usage context.

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

Parameters3/5

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

Schema coverage is 100% with detailed parameter description. The description only mentions 'by their ID' which adds minimal semantic value beyond the schema.

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

Purpose5/5

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

The description uses the specific verb 'Get' and resource 'user's profile' with method 'by their ID'. It clearly distinguishes from sibling 'get_user_by_username' by specifying ID-based lookup vs username.

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

Usage Guidelines5/5

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

Explicitly states 'Use when you have the user ID' and provides the alternative 'For lookup by @username, use get_user_by_username instead.' This gives clear context for when to select this tool.

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

get_user_by_usernameA
Read-onlyIdempotent

Get a user's profile by their username.

Returns user information including username, email, and status. Use when you know the @username but not the user ID. For lookup by ID, use get_user instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesMattermost username

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique user identifier
emailYesEmail address
rolesYesSpace-separated system roles
localeYesUser locale preference
nicknameYesNickname
usernameYesUnique username
create_atNoCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if active)
last_nameYesLast name
update_atNoLast update timestamp in milliseconds
first_nameYesFirst name
mfa_activeNoMulti-factor auth enabled
auth_serviceYesAuthentication service
email_verifiedNoEmail verification status
last_picture_updateNoLast avatar update timestamp
last_password_updateNoLast password change timestamp

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so description adds value by stating what is returned ('username, email, and status'). No contradiction, but additional behavioral detail is minimal beyond 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?

Three sentences, each serving a distinct purpose: purpose, output, usage guidance. Zero wasted words, efficiently front-loaded.

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

Completeness5/5

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

Simple tool with one parameter and an output schema (implied by context). Description covers input, output, and alternative tool. Complete for its complexity level.

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

Parameters3/5

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

Schema coverage is 100% with detailed parameter description ('Mattermost username', pattern, length). Description adds the '@username' context but doesn't significantly extend meaning beyond schema.

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

Purpose5/5

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

States 'Get a user's profile by their username' with specific verb+resource. Differentiates from get_user (by ID) and search_users, so purpose is clear and distinct from siblings.

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

Usage Guidelines5/5

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

Explicitly says when to use: 'Use when you know the @username but not the user ID' and provides alternative 'For lookup by ID, use get_user instead'. Provides clear context and exclusion.

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

get_user_statusA
Read-onlyIdempotent

Get a user's online/offline status.

Returns: online, away, dnd (do not disturb), or offline. Use to check if a user is available before sending a message.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYes26-character user identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
manualYesManually set status
statusYesStatus: online, away, dnd, offline
user_idYesUser identifier
last_activity_atYesLast activity timestamp

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds the specific status values returned, providing useful behavioral context beyond 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?

Three concise sentences with no wasted words. The purpose is front-loaded, followed by return values and usage hint.

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

Completeness5/5

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

Given the simple tool with good annotations and output schema, the description is complete. It covers purpose, output values, and usage context.

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

Parameters3/5

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

Schema coverage is 100% with a detailed parameter description. The tool description does not add extra meaning beyond the schema, so baseline score of 3 applies.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get a user's online/offline status.' It lists the possible return values (online, away, dnd, offline) and distinguishes from sibling tools like get_user which focus on profile info.

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

Usage Guidelines4/5

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

The description includes a direct usage note: 'Use to check if a user is available before sending a message.' This provides clear context, though it lacks explicit when-not or alternatives.

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

join_channelA
Idempotent

Join a public channel.

Adds the authenticated user to the channel. Cannot be used to join private channels. Joining a channel you're already in has no additional effect.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
rolesYesSpace-separated role names
user_idYesUser identifier
msg_countYesMessages seen count, including replies in threads
channel_idYesChannel identifier
mention_countYesUnread @-mentions count, including thread replies
last_update_atYesLast update timestamp
last_viewed_atYesLast viewed timestamp
msg_count_rootYesRoot messages seen count, excluding thread replies
mention_count_rootYesUnread root @-mentions count, excluding thread replies

TDQS

A4.1/5.0
Behavior4/5

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

Beyond annotations (idempotent, not destructive), description adds that joining a channel you're already in has no effect, which aligns with idempotency. Also clarifies public-only restriction.

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?

Three concise sentences front-load the core action and provide essential constraints. No wasted words.

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

Completeness5/5

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

Given the simple action and presence of output schema, the description covers purpose, scope (public), and behavioral effects (idempotent). Complete for the tool's complexity.

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

Parameters3/5

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

Schema covers 100% of parameters with a descriptive example. Description adds no extra meaning beyond what the schema provides, so baseline score.

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

Purpose5/5

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

Clearly states the tool joins a public channel and adds the authenticated user. Distinguishes from private channels and notes idempotent behavior. Differentiates from sibling tools like leave_channel and add_user_to_channel.

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?

Implicitly suggests use for public channels only and notes no effect if already a member. Does not explicitly compare with alternatives like add_user_to_channel for adding others.

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

leave_channelA
Idempotent

Leave a channel.

Removes the authenticated user from the channel. Cannot leave Town Square or other default channels. Can rejoin public channels later with join_channel.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

TDQS

A4.5/5.0
Behavior4/5

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

Discloses that the user is removed, and adds context about default channels and rejoin capability. Annotations indicate idempotent and non-destructive, but description does not contradict. Could clarify behavior if user is not a member.

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?

Three sentences, front-loaded with action, no wasted words. Efficient and clear.

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

Completeness5/5

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

For a simple tool with one parameter and no output schema, the description covers action, constraints, and post-action behavior (rejoin). Annotations provide additional safety info.

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

Parameters3/5

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

Schema coverage is 100% with a clear description of channel_id. Description adds no further parameter details, so baseline score is appropriate.

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

Purpose5/5

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

Description clearly states the action (leave) and resource (channel). It distinguishes itself from siblings like join_channel and add_user_to_channel by specifying constraints like cannot leave default channels.

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

Usage Guidelines5/5

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

Provides explicit when-to-use (leave a channel) and when-not-to (cannot leave Town Square or other default channels). Mentions alternative join_channel for rejoining.

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

list_bookmarksA
Read-onlyIdempotent

List all bookmarks in a channel.

Returns bookmarks in sort order. Use to see saved links and files pinned to a channel. For searching messages, use search_messages instead.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
bookmarks_sinceNoTimestamp to filter bookmarks updated since

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. Description adds valuable behavioral context: 'Returns bookmarks in sort order' and edition/version constraints, without contradiction.

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?

Four concise, purposeful sentences. No filler, each sentence adds distinct value: purpose, sort order, usage guidance, and prerequisite notes.

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

Completeness5/5

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

Simple listing tool with output schema present and annotations covering safety. Description fully captures all necessary context: what it does, how it behaves, when to use, and requirements.

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

Parameters3/5

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

Schema has 100% coverage with detailed parameter descriptions. Description adds 'sort order' context not in schema, but baseline is 3 due to complete schema coverage.

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

Purpose5/5

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

States 'List all bookmarks in a channel' with a clear verb and resource. Immediately distinguishes from the sibling 'search_messages', making its unique purpose obvious.

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

Usage Guidelines5/5

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

Explicitly states when to use ('to see saved links and files pinned to a channel') and when not to ('For searching messages, use search_messages instead'). Also includes edition and version requirements.

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

list_my_channelsA
Read-onlyIdempotent

List channels you are a member of in a team.

Returns your channels with unread counters and the read marker for the authenticated user. Two counter pairs are provided:

  • unread_msg_count / mention_count count thread replies too (the channel badge with Collapsed Reply Threads off — the team default).

  • unread_msg_count_root / mention_count_root count only root posts (the badge with Collapsed Reply Threads on).

last_viewed_at is the user's read marker for the channel. Pass it as get_channel_messages(channel_id, since=last_viewed_at) for incremental sync, or use get_channel_messages(channel_id, unread_only=True) for the unread window (preferred — deterministic and edit-noise-free).

Channels without a membership record report 0 for all counters and last_viewed_at.

Use channel_types to narrow results: ["O", "P"] for workspace channels without DMs, or ["D"] for direct messages only. Use only_unread=True to get only channels with unread messages. For discovering public channels you haven't joined yet, use list_public_channels.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idYes26-character team identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
only_unreadNoReturn only channels with unread messages
channel_typesNoChannel types to include: O=public, P=private, D=direct message, G=group message. Omit to return all types.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint. Description adds meaningful behavioral context: explains the two counter pairs (with and without thread replies), the semantics of last_viewed_at, and that channels without membership return zeros. No contradiction with annotations.

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

Conciseness4/5

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

First sentence immediately states purpose. The description is well-structured with bullet-like formatting for counter pairs. Each sentence provides distinct information, but could be slightly tightened (e.g., merging counter explanations). Still, no wasted words.

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

Completeness5/5

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

Given the tool's complexity (multiple counters, read marker, filtering options), the description covers all usage aspects, edge cases, and relations to other tools. Output schema exists, so return value explanation is not needed.

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

Parameters5/5

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

Schema description coverage is 100%, so baseline is 3. Description adds value by explaining the meaning of counters and how last_viewed_at is used in subsequent calls. It also gives practical values for channel_types. This enriches parameter understanding beyond schema.

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

Purpose5/5

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

The description clearly states 'List channels you are a member of in a team,' specifying both the resource (channels) and the scope (your memberships). It distinguishes from sibling 'list_public_channels' by saying 'For discovering public channels you haven't joined yet, use list_public_channels.' Verb and resource are precise.

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

Usage Guidelines5/5

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

Provides explicit guidance: use channel_types to narrow results (with examples), use only_unread=True for unread channels, and explicitly names alternative list_public_channels for channels not joined. This covers when and when not to use the tool.

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

list_public_channelsA
Read-onlyIdempotent

List public channels available in a team.

Returns all public channels for discovery, including ones you haven't joined. Results are paginated. Use page/per_page to retrieve all channels. Useful for finding channels to join. For channels you are already a member of (including private), use list_my_channels.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (0-indexed)
team_idYes26-character team identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
per_pageNoResults per page

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. Description adds pagination behavior and scope (including unjoined channels), which are useful beyond annotations. No contradictions.

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?

Three sentences, no wasted words, front-loaded with the main purpose. Efficient and easy to scan.

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?

Output schema exists, so return values are handled. Description covers the essential: what is returned, pagination, and scope. Could mention that team_id is required, but that's already in schema. Still complete enough.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description mentions page and per_page in context of pagination, but does not add details beyond schema (e.g., defaults, bounds). Minimal added value.

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

Purpose5/5

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

Clearly states it lists public channels for discovery, including unjoined ones. Distinguishes from sibling list_my_channels which returns channels the user is a member of. Verb+resource is explicit.

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

Usage Guidelines4/5

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

Explicitly states when to use: for finding channels to join. Provides exclusion: use list_my_channels for channels you are already a member of. Could mention more alternatives but sufficient.

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

list_teamsA
Read-onlyIdempotent

List teams the current user belongs to.

Returns team name, description, and settings. Use this to discover available teams before listing channels.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description adds value by specifying return fields (team name, description, settings). No contradictions.

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?

Two sentences that front-load the action and provide essential detail. No redundancy or wasted words.

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?

Given zero parameters, presence of output schema, and annotations that cover safety, the description sufficiently explains the tool's purpose and usage. Minor omission: no mention of pagination or performance, but acceptable for a simple list.

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?

No parameters exist, so the description cannot add anything beyond the schema. Baseline score of 4 applies.

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

Purpose5/5

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

The description uses a specific verb 'list' and resource 'teams' with a clear scope 'current user belongs to'. It distinguishes from siblings like 'get_team' and channel-listing tools by providing a use case.

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

Usage Guidelines4/5

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

Explicitly states when to use: 'Use this to discover available teams before listing channels.' While no explicit exclusions are given, the context signals differentiate it from sibling tools.

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

mark_channel_viewedA

Mark a channel as read for the authenticated user.

Clears unread counters and advances last_viewed_at. Use when the user asks to clear unreads, when a bot has processed get_channel_messages(unread_only=True) and needs to advance read state for the next poll, or as a one-shot bootstrap on a channel with last_viewed_at == 0 so unread_only queries return posts.

Do NOT call on accounts shared with humans — it clears their UI badge.

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

TDQS

A4.6/5.0
Behavior5/5

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

Discloses behavioral effects: 'Clears unread counters and advances last_viewed_at'. Warns about clearing UI badges for shared accounts. No annotations contradicted; destructiveHint=false is consistent.

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

Conciseness4/5

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

The description is a single paragraph with dense but clear sentences. It is well-structured and front-loaded with the primary purpose, but slightly longer than necessary due to detailed usage examples.

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

Completeness5/5

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

For a simple tool with one parameter and no output schema, the description covers purpose, usage guidance, behavioral effects, and an anti-pattern. It is fully sufficient for correct agent invocation.

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

Parameters3/5

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

Schema coverage is 100% with a clear description of the channel_id format. The tool description adds no additional parameter semantics beyond what the schema already provides, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action 'Mark a channel as read' and the resource 'channel for authenticated user'. It distinguishes this tool from siblings like leave_channel or create_channel by focusing on read state management.

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

Usage Guidelines5/5

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

Explicitly provides three specific use cases (user asks to clear unreads, bot processing unread messages, bootstrap with last_viewed_at==0) and an explicit anti-pattern ('Do NOT call on accounts shared with humans').

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

pin_messageA
Idempotent

Pin a message in a channel.

Pinned messages appear in the channel's pinned posts section. Pinning an already pinned message has no additional effect.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes26-character post/message identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique post identifier
typeYesPost type (empty for regular posts)
edit_atYesLast edit timestamp
messageYesPost content (supports Markdown)
root_idYesRoot post ID if in thread
user_idYesAuthor user identifier
file_idsYesAttached file IDs
hashtagsYesSpace-separated hashtags
create_atYesCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if not deleted)
is_pinnedYesWhether post is pinned
update_atYesLast update timestamp in milliseconds
channel_idYesChannel where posted
original_idYesOriginal post ID if edited
pending_post_idYesClient-side pending ID

TDQS

A3.6/5.0
Behavior4/5

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

Annotations provide idempotentHint and destructiveHint; the description adds explicit confirmation that pinning an already pinned message has no effect, and explains where pinned messages appear (channel's pinned posts section).

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 very concise: one sentence for the main action followed by two short clarifying sentences. It is front-loaded and contains no unnecessary words.

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 simple tool with one parameter and annotations, the description covers the main behavior and idempotency. It lacks mention of permissions or prerequisites, but given the output schema exists, it is fairly complete.

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

Parameters3/5

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

Schema coverage is 100% with a clear description of the 'post_id' parameter. The tool description does not add further parameter semantics, but baseline is 3 because schema already handles it.

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 states 'Pin a message in a channel' with the specific verb 'pin' and resource 'message' in a channel. It adds context about pinned posts section but does not explicitly distinguish from the sibling tool 'unpin_message'.

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

Usage Guidelines2/5

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

The description does not provide guidance on when to use this tool vs alternatives like 'unpin_message' or other channel operations. It only states the action and idempotency, but no when-to-use or when-not-to-use advice.

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

post_messageA

Post a message to a Mattermost channel.

Send text messages with Markdown support. Use root_id to reply in a thread. Use file_ids to attach uploaded files. Use attachments for rich formatted content. To read all messages in a thread, use get_thread.

Attachment examples:

  • Status alert: {"color": "danger", "title": "Build Failed", "text": "Tests failed on main"}

  • Success notification: {"color": "good", "title": "Deployed", "text": "v1.2.3 is live"}

  • With fields: {"title": "Ticket", "fields": [{"title": "Status", "value": "Open", "short": true}]}

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesMessage content (supports Markdown)
root_idNoRoot post ID for threading
file_idsNoFile IDs to attach (from upload_file)
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
attachmentsNoRich message attachments with colors, fields, images

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique post identifier
typeYesPost type (empty for regular posts)
edit_atYesLast edit timestamp
messageYesPost content (supports Markdown)
root_idYesRoot post ID if in thread
user_idYesAuthor user identifier
file_idsYesAttached file IDs
hashtagsYesSpace-separated hashtags
create_atYesCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if not deleted)
is_pinnedYesWhether post is pinned
update_atYesLast update timestamp in milliseconds
channel_idYesChannel where posted
original_idYesOriginal post ID if edited
pending_post_idYesClient-side pending ID

TDQS

A4/5.0
Behavior2/5

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

Description only states 'Post a message' which implies mutation. Annotations provide destructiveHint=false but no readOnlyHint. Does not disclose rate limits, authentication needs, side effects, or behavior on error. Minimal addition beyond 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?

Very concise: 4 sentences plus examples. Front-loaded with main purpose. Every sentence earns its place. No redundant information.

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?

Covers main use cases (post, reply, attach files, rich content) and points to get_thread for reading. Output schema exists, so return values need not be explained. Could mention channel membership requirement, but overall adequate.

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?

Schema coverage is 100%, so baseline is 3. Description adds value by explaining the purpose of each parameter (e.g., 'Use root_id to reply in a thread') and provides concrete examples for attachments, enhancing understanding beyond schema descriptions.

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

Purpose5/5

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

Clearly states the verb 'Post' and resource 'message to a Mattermost channel'. Distinguishes from sibling tool 'get_thread' by directing users to use that for reading messages in a thread. Provides specific use cases like replying in threads and attaching files.

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

Usage Guidelines4/5

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

Explicitly tells when to use get_thread instead (for reading). Gives guidance on using root_id for threading, file_ids for attachments, and attachments for rich content. Lacks explicit prerequisites like channel membership or permissions.

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

remove_reactionA
Idempotent

Remove your emoji reaction from a message.

Removes a reaction previously added by the authenticated user. Removing a non-existent reaction has no effect.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes26-character post/message identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
emoji_nameYesEmoji name without colons (e.g., 'thumbsup', 'smile')

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already provide idempotentHint and destructiveHint. The description adds 'Removing a non-existent reaction has no effect', reinforcing idempotency and safety. No contradiction, and additional context is provided.

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?

Two concise sentences, front-loaded with core action. Every sentence provides essential information without fluff.

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

Completeness5/5

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

Given the simple tool (2 parameters, no output schema, annotations covering idempotency/destructive), the description is complete. It covers purpose, scope, and edge cases (non-existent reaction) adequately.

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

Parameters3/5

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

Schema coverage is 100% with detailed descriptions and examples for both parameters. The description adds no extra parameter information, so baseline 3 is appropriate.

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

Purpose5/5

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

The description states 'Remove your emoji reaction from a message' with a specific verb and resource, and clarifies it only affects own reactions. It implicitly distinguishes from add_reaction and get_reactions siblings.

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?

No explicit guidance on when to use versus alternatives like add_reaction. The verb 'remove' implies purpose, but an agent may benefit from a note that this only removes own reactions and not others'.

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

search_messagesA
Read-onlyIdempotent

Search for messages matching specific criteria across channels.

Searches message content within a team. For simply reading recent channel messages, use get_channel_messages instead.

Search syntax examples:

  • Simple text: "deployment error"

  • From user: "from:username bug"

  • In channel: "in:channel-name release"

  • Date range: "after:2024-01-01 before:2024-02-01"

  • Combined: "from:alice in:dev-ops deployment failed"

ParametersJSON Schema
NameRequiredDescriptionDefault
termsYesSearch terms (Mattermost syntax)
team_idYes26-character team identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
is_or_searchNoUse OR instead of AND for multiple terms

Output Schema

ParametersJSON Schema
NameRequiredDescription
orderYesPost IDs in display order
postsYesMap of post ID to Post object
truncatedNoTrue when the response hit a Mattermost response cap — more posts exist beyond this batch
next_post_idNoNext post ID for pagination
prev_post_idNoPrevious post ID for pagination

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds behavioral context like search syntax and cross-channel capability, which complements the annotations without contradiction.

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?

Extremely concise: purpose, clarifier, then bullet examples. Every sentence adds value with zero waste.

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

Completeness5/5

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

With output schema present, return values are covered. Description explains purpose, usage, parameter syntax, and alternative tool, making it fully informative given the tool's complexity.

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?

Schema coverage is 100% (baseline 3). The description adds useful search syntax examples that clarify the 'terms' parameter usage, providing value beyond the schema.

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

Purpose5/5

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

Clearly states 'Search for messages matching specific criteria across channels.' and distinguishes from 'get_channel_messages' by mentioning when to use that alternative instead.

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

Usage Guidelines4/5

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

Explicitly provides a comparative alternative and search syntax examples, giving clear context on when to use the tool, though it doesn't explicitly state exclusions.

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

search_usersA
Read-onlyIdempotent

Search for users by name or username.

Searches across username, first name, last name, and nickname. Use to find users when you don't know their exact username or ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYesSearch term
team_idNoLimit search to a specific team

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, and description adds that it searches across username, first name, last name, and nickname. No contradictions; fully transparent about behavior.

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?

Three concise sentences, front-loaded with the main purpose. No wasted words. Perfectly sized for quick scanning.

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?

Given the simple tool with 2 parameters, high schema coverage, and annotations, the description covers purpose, usage, and search scope. Output schema exists, so return details are likely documented elsewhere. Minor gap: doesn't mention result pagination, but output schema may cover it.

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?

Schema coverage is 100%, but description adds meaning by explaining that the search term applies to multiple fields (username, first name, etc.), which is not evident from the schema's 'Search term' description. Adds value beyond schema.

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

Purpose5/5

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

Clearly states 'Search for users by name or username' and specifies it searches across multiple fields. Distinguishes from sibling tools like get_user (by ID) and get_user_by_username (exact username) by focusing on partial matches.

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

Usage Guidelines4/5

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

Explicitly says 'Use to find users when you don't know their exact username or ID,' providing clear context for when to use this tool over exact lookups. Could be improved by naming alternatives, but context is sufficient.

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

unpin_messageA
Idempotent

Unpin a message from a channel.

Removes the message from the channel's pinned posts. Unpinning a non-pinned message has no effect.

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYes26-character post/message identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique post identifier
typeYesPost type (empty for regular posts)
edit_atYesLast edit timestamp
messageYesPost content (supports Markdown)
root_idYesRoot post ID if in thread
user_idYesAuthor user identifier
file_idsYesAttached file IDs
hashtagsYesSpace-separated hashtags
create_atYesCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if not deleted)
is_pinnedYesWhether post is pinned
update_atYesLast update timestamp in milliseconds
channel_idYesChannel where posted
original_idYesOriginal post ID if edited
pending_post_idYesClient-side pending ID

TDQS

A4.1/5.0
Behavior4/5

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

Annotations indicate idempotent and non-destructive behavior. The description adds the important detail that unpinning a non-pinned message has no effect, which reinforces idempotency and clarifies the tool's safety.

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 concise with three sentences, the first being the main action. No unnecessary words.

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

Completeness5/5

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

Given the simplicity of the tool, the description covers the action, effect, edge case, and implicit requirements. The output schema exists, so return values need not be explained.

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

Parameters3/5

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

Schema coverage is 100% and the schema already provides a detailed description of the post_id parameter. The description does not add any additional parameter semantics beyond what is in the schema.

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

Purpose5/5

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

The description clearly states the action ('Unpin a message from a channel') with a specific verb and resource, and the tool's purpose is distinct from sibling tools like pin_message and delete_message.

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 explains what the tool does but does not provide explicit guidance on when to use it versus alternatives (e.g., pin_message). The context of unpinning is understood but not compared directly.

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

update_bookmarkA
Idempotent

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.

ParametersJSON 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

ParametersJSON Schema
NameRequiredDescription
idYesUnique bookmark identifier
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)
file_infoNoFile metadata for file bookmarks
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

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare idempotentHint and destructiveHint. Description adds partial update semantics, complementing annotations without contradiction.

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

Conciseness4/5

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

Three focused sentences, front-loaded with action. Edition note is useful but slightly disrupts flow.

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?

Covers partial update, edition, and version; output schema handles return values. No missing critical context for a simple update.

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

Parameters3/5

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

Schema has 100% coverage with descriptions; description adds no parameter-level detail, meeting baseline but not exceeding.

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

Purpose5/5

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

Clearly states 'Update a channel bookmark' and 'Partially updates bookmark properties', distinguishing it from create_bookmark and delete_bookmark siblings.

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

Usage Guidelines4/5

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

Provides edition and version constraints, implying only one tool for partial updates. Could explicitly mention when not to use, but sibling names clarify alternatives.

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

update_bookmark_sort_orderA
Idempotent

Reorder a channel bookmark.

Moves the bookmark to the specified position. Other bookmarks are automatically adjusted. Returns all affected bookmarks with updated positions.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
bookmark_idYes26-character bookmark identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
new_sort_orderYesNew position in bookmark list

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations (idempotentHint: true, destructiveHint: false) are consistent. The description adds that other bookmarks are automatically adjusted and returns all affected bookmarks with updated positions, providing useful behavioral context beyond 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 concise (5 lines), front-loaded with the primary action, and each sentence adds meaningful information without redundancy.

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

Completeness5/5

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

Given the tool's simplicity (3 parameters, no nested objects, output schema present), the description covers behavior, side effects, edition restrictions, and version requirements, making it fully complete.

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?

Schema coverage is 100% with clear parameter descriptions. The description adds the concept of moving to a specified position and auto-adjustment, which enhances understanding beyond the schema alone.

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

Purpose5/5

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

The description clearly states the action ('Reorder a channel bookmark') and the specific resource (channel bookmark). It distinguishes from sibling tools like update_bookmark by focusing on sort order manipulation.

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

Usage Guidelines4/5

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

The description specifies edition requirements (not Team Edition) and minimum version (v10.1). It implies usage for reordering bookmarks but does not explicitly mention when not to use or alternatives, though context is clear.

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

update_messageA

Edit an existing message.

Can only edit your own messages (unless admin). The message will show as edited. Original content is replaced; edit history is not preserved.

Attachment examples:

  • Status alert: {"color": "danger", "title": "Build Failed", "text": "Tests failed on main"}

  • With fields: {"title": "Ticket", "fields": [{"title": "Status", "value": "Open", "short": true}]}

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesNew message content
post_idYes26-character post/message identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')
attachmentsNoRich message attachments with colors, fields, images

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique post identifier
typeYesPost type (empty for regular posts)
edit_atYesLast edit timestamp
messageYesPost content (supports Markdown)
root_idYesRoot post ID if in thread
user_idYesAuthor user identifier
file_idsYesAttached file IDs
hashtagsYesSpace-separated hashtags
create_atYesCreation timestamp in milliseconds
delete_atYesDeletion timestamp (0 if not deleted)
is_pinnedYesWhether post is pinned
update_atYesLast update timestamp in milliseconds
channel_idYesChannel where posted
original_idYesOriginal post ID if edited
pending_post_idYesClient-side pending ID

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the destructiveHint=false annotation, it explains that the message will show as edited, original content is replaced, and edit history is not preserved. This adds behavioral context.

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?

Very concise: one line for purpose, then bullet points for behavioral details and attachment examples. No wasted words, front-loaded.

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

Completeness5/5

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

Covers all relevant aspects: editing, permissions, edit behavior, and rich attachment examples. The tool is simple and description is sufficient.

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?

Schema coverage is 100%, so baseline 3. The description includes attachment examples, which add significant meaning beyond the schema for that parameter.

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

Purpose5/5

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

The description starts with 'Edit an existing message', which is a clear verb+resource. It distinguishes from siblings like delete_message and post_message.

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

Usage Guidelines4/5

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

It states 'Can only edit your own messages (unless admin)', providing clear context on when to use. It implies not to use if not own message and not admin. No explicit alternatives, but the condition is clear.

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

upload_fileA

Upload a file to a channel.

The file will be attached to messages in the specified channel. Returns file ID that can be used when posting messages with file_ids parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNoOverride filename
file_pathYesLocal path to the file to upload
channel_idYes26-character channel identifier (e.g., 'o5w8h47pdfbzjc4d8w7dhnhren')

Output Schema

ParametersJSON Schema
NameRequiredDescription
client_idsNoClient-provided IDs
file_infosYesUploaded file information

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only include destructiveHint: false, indicating no destructive behavior. The description adds context about the file being attached to messages and returning a file ID for later use. It does not contradict annotations and provides meaningful behavioral insight beyond the annotation.

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 concise with two sentences, front-loading the action 'Upload a file to a channel'. Every sentence provides essential information without redundancy.

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?

The description covers the main action, return value, and relationship to messages. Given the simple nature of the tool and that an output schema exists, it is fairly complete. Minor omissions like file size limits or accepted types are not critical for basic usage.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents each parameter. The description does not add additional meaning beyond stating the file will be attached to messages, which is implicit from the tool's purpose. Thus, the description adds marginal value over the schema.

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

Purpose5/5

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

The description clearly states the tool uploads a file to a channel and attaches it to messages. It distinguishes from sibling tools like get_file_info which only retrieve file details, and no other upload tool exists, making the purpose unambiguous.

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

Usage Guidelines4/5

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

The description explains that the file will be attached to messages in the specified channel, giving clear context for when to use this tool. However, it does not explicitly mention when not to use it or provide alternatives, such as using existing file IDs from other tools.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 38 tool updatesv0.5.1
    • First observedadd_reaction
    • First observedadd_user_to_channel
    • First observedcreate_bookmark
    • First observedcreate_channel
    • First observedcreate_direct_channel
    • First observeddelete_bookmark
    • First observeddelete_message
    • First observedget_channel
    • First observedget_channel_by_name
    • First observedget_channel_members
    • First observedget_channel_messages
    • First observedget_file_info
    • First observedget_file_link
    • First observedget_me
    • First observedget_reactions
    • First observedget_team
    • First observedget_team_members
    • First observedget_thread
    • First observedget_user
    • First observedget_user_by_username
    • First observedget_user_status
    • First observedjoin_channel
    • First observedleave_channel
    • First observedlist_bookmarks
    • First observedlist_my_channels
    • First observedlist_public_channels
    • First observedlist_teams
    • First observedmark_channel_viewed
    • First observedpin_message
    • First observedpost_message
    • First observedremove_reaction
    • First observedsearch_messages
    • First observedsearch_users
    • First observedunpin_message
    • First observedupdate_bookmark
    • First observedupdate_bookmark_sort_order
    • First observedupdate_message
    • First observedupload_file

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct action and resource, such as channel operations (create, join, leave, list, etc.), bookmark CRUD, message functions, reactions, threads, files, users, and teams. No two tools have overlapping purposes that would cause confusion for an agent.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, e.g., create_channel, get_channel_members, post_message. The naming is predictable and uniform, with only one longer name (update_bookmark_sort_order) that still adheres to the style.

Tool Count3/5

With 38 tools, the server covers a wide range of Mattermost functionality, but this exceeds the typical 3-15 range for a well-scoped set. While each tool serves a purpose, the count feels heavy and could be streamlined (e.g., merging some getters).

Completeness4/5

The tool surface covers core operations for channels, messages, reactions, threads, files, users, and teams. Minor gaps exist, such as the lack of channel deletion or archiving, but the essential workflows for an agent are well-supported.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Enables Claude to interact with Mattermost through search functionality, user management, channel operations, and team information retrieval. Supports message search by keywords/users/dates, thread viewing, and displays all timestamps in Korean Standard Time (KST).
    9
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to interact with Slack workspaces through comprehensive channel management, messaging, direct messages, search functionality, and user management capabilities.
    30
    11
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    This server enables interaction with Mattermost workspaces to manage channels, messages, threads, and user profiles via the Mattermost REST API. It provides a comprehensive suite of tools for reading channel history, posting messages, and managing reactions within a trusted environment.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables interaction with Mattermost workspaces to manage channels, messages, threads, reactions, and user profiles via the REST API. This server allows AI models to perform both read and write operations, such as posting messages and retrieving channel history, within a trusted environment.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cloud-ru-tech/mcp-server-mattermost'

If you have feedback or need assistance with the MCP directory API, please join our Discord server