Skip to main content
Glama
conarti

Mattermost MCP Server

by conarti

Mattermost MCP Server

MCP Server for the Mattermost API, enabling Claude and other MCP clients to interact with Mattermost workspaces.

Quick Start

npx @conarti/mattermost-mcp --help

Using environment variables

MATTERMOST_URL=https://your-mattermost.com/api/v4 \
MATTERMOST_TOKEN=your-token \
MATTERMOST_TEAM_ID=your-team-id \
npx @conarti/mattermost-mcp

Using CLI arguments

npx @conarti/mattermost-mcp \
  --url https://your-mattermost.com/api/v4 \
  --token your-token \
  --team-id your-team-id

Related MCP server: Mattermost MCP Server

Installation

Option 1: npx (no installation needed)

npx @conarti/mattermost-mcp

Option 2: Global installation

npm install -g @conarti/mattermost-mcp
mattermost-mcp --help

Option 3: Clone and build

git clone https://github.com/conarti/mattermost-mcp.git
cd mattermost-mcp
npm install
npm run build
npm start

Browser sign-in (no token)

MATTERMOST_TOKEN is optional. Without a token the server signs in to Mattermost through a visible Chromium window and keeps the session token for you. With MATTERMOST_TOKEN set, the server works as before (static mode): no browser window, no Chromium download, and ~/.config/mattermost-mcp is not created.

First sign-in

  1. Configure the server with MATTERMOST_URL and MATTERMOST_TEAM_ID only, without a token (see Claude Code Integration and opencode below).

  2. Call any Mattermost tool. The server opens a Chromium window with the Mattermost login page.

  3. Sign in the way you usually do (password, SSO, MFA). You have up to 5 minutes.

  4. The window closes by itself as soon as the session is valid, and the tool call returns its result.

While the call waits, the server sends progress notifications every 10 seconds, so clients that show MCP progress display the current step. The window opens only from a tool call: never at server startup and never from background monitoring.

Chromium is downloaded automatically

No manual installation is needed.

  • On the first sign-in the server downloads Chromium and ffmpeg for Playwright 1.63.0 (about 183 MiB on macOS arm64) into ~/.config/mattermost-mcp/browsers. The client shows the progress as Downloading Chromium for Mattermost sign-in: 40% of 182.1 MiB, and for the small ffmpeg archive that follows as Downloading Chromium for Mattermost sign-in: FFmpeg 50% of 1 MiB.

  • The first call takes longer: the download is limited to 10 minutes, and the 5 minutes for sign-in start after the download has finished.

  • After an update of this package to a version with another Playwright version, the matching Chromium build is downloaded the same way.

  • Behind a proxy or with a download mirror, set HTTPS_PROXY, HTTP_PROXY, NO_PROXY, PLAYWRIGHT_DOWNLOAD_HOST or PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT in the env of the MCP server entry.

  • The shared Playwright cache (~/Library/Caches/ms-playwright on macOS) is not used: Playwright installations in other projects remove builds that no project references.

  • If the download fails, the error contains the reason and a manual command as a fallback, see Browser sign-in problems.

  • On Linux without the system libraries for Chromium, a one-time install-deps command is needed, see Browser sign-in problems.

  • Keep this package up to date: each release pins a Playwright version, and newer versions bring Chromium builds with security fixes.

  • Keep PLAYWRIGHT_DOWNLOAD_HOST on https:// and do not disable TLS certificate checks for the download (for example with NODE_TLS_REJECT_UNAUTHORIZED=0): the downloaded Chromium later holds your Mattermost session.

What is stored where

Everything lives in ~/.config/mattermost-mcp/ (permissions 0700):

  • browsers/: Chromium builds for the sign-in window.

  • profile/: the Chromium profile with the Mattermost session. It is as sensitive as the token because cookies in it are not encrypted. Exclude it from dotfiles sync and backups.

  • token: the session token (permissions 0600), bound to the server address.

  • login.lock and login.lock.break: short-lived lock files that let several server processes share one sign-in window.

  • tmp/: temporary files of the Chromium download, removed after the installation.

The server refuses to use the directory if ~/.config or your home directory belongs to another user or is writable by group or others without the sticky bit, see [STATE_DIRECTORY_UNSAFE] in Browser sign-in problems.

Security of the sign-in window

  • The Chromium window runs with the Chromium sandbox enabled, because it renders Mattermost content written by other users. Set MATTERMOST_MCP_DISABLE_CHROMIUM_SANDBOX=1 in the env of the MCP server entry only if the sandbox is unavailable on your system ([BROWSER_SANDBOX_UNAVAILABLE]). The server then logs a warning each time it opens the window.

  • Use an https:// address in MATTERMOST_URL. With http:// and a host other than localhost, 127.0.0.1 or [::1], the server logs a warning at startup: the password typed into the sign-in window and the session token are sent without encryption.

Resetting the session

Remove only the session (the next tool call opens the sign-in window again):

rm -rf ~/.config/mattermost-mcp/profile ~/.config/mattermost-mcp/token

Remove everything, including Chromium (it is downloaded again on the next sign-in):

rm -rf ~/.config/mattermost-mcp

Both commands are safe while the sign-in window is open.

Several clients

Claude Code, opencode and other clients on the same machine share one token file and one sign-in window. If several clients need sign-in at the same time, only one window opens, and all waiting calls continue after you sign in.

Background topic monitoring never opens the window. When the server starts without a saved session:

  • If monitoring.userId or monitoring.notificationChannelId is not set, the monitor cannot look them up, and its schedule does not start. Call mattermost_run_monitoring: it signs in if needed, starts the schedule and runs monitoring once. Signing in through another tool does not start the schedule, so call mattermost_run_monitoring afterwards or restart the server.

  • If both are set, the schedule starts right away, and runs before the first sign-in are skipped with [AUTHENTICATION_REQUIRED] in the logs.

opencode

Example of an opencode entry without a token:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mattermost": {
      "type": "local",
      "command": ["npx", "-y", "@conarti/mattermost-mcp@latest"],
      "environment": {
        "MATTERMOST_URL": "https://your-mattermost.com/api/v4",
        "MATTERMOST_TEAM_ID": "your-team-id"
      },
      "timeout": 360000
    }
  },
  "experimental": {
    "mcp_timeout": 360000
  }
}

Client timeouts

The first tool call can take several minutes: the Chromium download and then up to 5 minutes of sign-in. Progress notifications every 10 seconds keep the call alive in clients that pass a progressToken and reset their timeout on progress.

  • opencode: set mcp.mattermost.timeout and experimental.mcp_timeout to 360000 (6 minutes) as in the example above. Some opencode versions apply a hard request timeout that progress notifications do not extend.

  • A client that does not pass a progressToken can cancel the first call during the Chromium download. The download then stops and starts from the beginning on the next call. Raise the client timeout, or run the manual installation command from Browser sign-in problems once.

Limitations

  • One Mattermost server per operating system user. A token file of another server is ignored. The addresses are normalized before the comparison, so /api/v4, a trailing slash and the letter case of the host do not matter.

  • If clients with different MATTERMOST_URL values sign in at the same time, the waiting call gets LOGIN_NOT_COMPLETED, and the window for the second server opens only when you call the tool again. Its token replaces the token of the first server, and the first server opens the window again on its next call.

  • Do not enable DEBUG=pw:* for the server: Playwright debug output prints cookies.

  • Windows is not supported.

Configuration

The server supports multiple configuration methods with the following priority (highest to lowest):

  1. CLI arguments (--url, --token, --team-id)

  2. Environment variables (MATTERMOST_URL, MATTERMOST_TOKEN, MATTERMOST_TEAM_ID)

  3. config.local.json (for local overrides, gitignored)

  4. config.json (default configuration)

CLI Arguments

Argument

Description

--url <url>

Mattermost API URL (e.g., https://mattermost.example.com/api/v4)

--token <token>

Mattermost personal access token

--team-id <id>

Mattermost team ID

--run-monitoring

Run topic monitoring immediately on startup

--exit-after-monitoring

Exit after running monitoring (use with --run-monitoring)

--help

Show help message

Environment Variables

Variable

Description

MATTERMOST_URL

Mattermost API URL

MATTERMOST_TOKEN

Mattermost personal access token (optional: without it the server uses browser sign-in)

MATTERMOST_TEAM_ID

Mattermost team ID

HTTPS_PROXY, HTTP_PROXY, NO_PROXY

Proxy for the automatic Chromium download in browser sign-in

PLAYWRIGHT_DOWNLOAD_HOST, PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT

Mirror and connection timeout for the automatic Chromium download

Configuration File

Create config.local.json (gitignored) or use config.json:

{
  "mattermostUrl": "https://your-mattermost-instance.com/api/v4",
  "token": "your-personal-access-token",
  "teamId": "your-team-id",
  "monitoring": {
    "enabled": false,
    "schedule": "*/15 * * * *",
    "channels": ["town-square", "off-topic"],
    "topics": ["tv series", "champions league"],
    "messageLimit": 50
  }
}

Claude Code Integration

Add to your Claude Code MCP settings (~/.claude/claude_desktop_config.json or via claude mcp add):

{
  "mcpServers": {
    "mattermost": {
      "command": "npx",
      "args": ["-y", "@conarti/mattermost-mcp@latest"],
      "env": {
        "MATTERMOST_URL": "https://your-mattermost.com/api/v4",
        "MATTERMOST_TOKEN": "your-token",
        "MATTERMOST_TEAM_ID": "your-team-id"
      }
    }
  }
}

Or using a config file:

{
  "mcpServers": {
    "mattermost": {
      "command": "node",
      "args": ["/path/to/mattermost-mcp/build/index.js"]
    }
  }
}

Or without a token, with browser sign-in:

{
  "mcpServers": {
    "mattermost": {
      "command": "npx",
      "args": ["-y", "@conarti/mattermost-mcp@latest"],
      "env": {
        "MATTERMOST_URL": "https://your-mattermost.com/api/v4",
        "MATTERMOST_TEAM_ID": "your-team-id"
      }
    }
  }
}

The first tool call opens the sign-in window and, on the first sign-in, downloads Chromium.

Features

Channel Tools

Tool

Description

mattermost_list_channels

List channels in the workspace (public, private, and DMs)

mattermost_get_channel_history

Get messages from a channel with filtering options

mattermost_list_channels Options

  • limit (default: 100): Maximum number of channels to return

  • page (default: 0): Page number for pagination

  • include_private (default: false): If true, returns all channels including private channels and direct messages (DMs)

mattermost_get_channel_history Options

  • channel_id (required): The ID of the channel

  • limit: Number of messages to retrieve. If not specified or 0, returns ALL messages

  • page (default: 0): Page number for pagination (only used when limit > 0)

  • since_date: ISO 8601 date to get messages after (e.g., "2025-01-15")

  • before_date: ISO 8601 date to get messages before. Use with since_date for date ranges

  • before_post_id: Get messages before this post ID (cursor pagination)

  • after_post_id: Get messages after this post ID (cursor pagination)

Examples:

// Get ALL messages from a channel
{ "channel_id": "abc123" }

// Get last 50 messages
{ "channel_id": "abc123", "limit": 50 }

// Get all messages from December 18, 2025
{ "channel_id": "abc123", "since_date": "2025-12-18", "before_date": "2025-12-19" }

// Get messages from a specific date onwards
{ "channel_id": "abc123", "since_date": "2025-12-15" }

Message Tools

Tool

Description

mattermost_post_message

Post a new message to a channel

mattermost_reply_to_thread

Reply to a specific message thread

mattermost_add_reaction

Add an emoji reaction to a message

mattermost_get_thread_replies

Get all replies in a thread

User Tools

Tool

Description

mattermost_get_users

Get a list of users in the workspace

mattermost_get_user_profile

Get detailed profile information for a user

Monitoring Tools

Tool

Description

mattermost_run_monitoring

Trigger topic monitoring immediately

Topic Monitoring

The server includes a topic monitoring system that can:

  • Monitor specified channels for messages containing topics of interest

  • Run on a configurable schedule (using cron syntax)

  • Send notifications when relevant topics are discussed

Configuration

{
  "monitoring": {
    "enabled": true,
    "schedule": "*/15 * * * *",
    "channels": ["general", "random"],
    "topics": ["important", "urgent"],
    "messageLimit": 50,
    "notificationChannelId": "optional-channel-id",
    "userId": "optional-user-id"
  }
}

Running Monitoring Manually

# Run monitoring and continue server
mattermost-mcp --run-monitoring

# Run monitoring and exit (useful for cron jobs)
mattermost-mcp --run-monitoring --exit-after-monitoring

Getting Your Credentials

Mattermost URL

Your Mattermost API URL is typically: https://your-mattermost-domain.com/api/v4

Personal Access Token

  1. Go to Account Settings > Security > Personal Access Tokens

  2. Click Create Token

  3. Give it a description and create

  4. Copy the token (it won't be shown again)

Team ID

  1. Go to your team in Mattermost

  2. Open browser developer tools (F12)

  3. Go to Network tab

  4. Refresh the page

  5. Look for API calls containing teams/ — the ID is in the URL

Or use the Mattermost API:

curl -H "Authorization: Bearer YOUR_TOKEN" \
  https://your-mattermost.com/api/v4/teams

Troubleshooting

Missing Configuration Error

Missing required configuration:
  - mattermostUrl (--url or MATTERMOST_URL)
  - teamId (--team-id or MATTERMOST_TEAM_ID)

Make sure you've provided the Mattermost URL and team ID via CLI arguments, environment variables, or config file. The token is not required: without it the server uses browser sign-in.

Permission Errors

Verify that:

  1. The Mattermost user has the necessary permissions: the owner of the personal access token, or the user you signed in as in the browser window

  2. With a token, the token is correctly set

  3. The Mattermost URL and team ID are correct

To sign in as another user in browser sign-in, reset the session and call a tool again.

Browser sign-in problems

Error messages start with a code in brackets.

[BROWSER_INSTALLATION_FAILED]: the automatic Chromium download failed. The error contains the reason, for example a proxy or network error. Fix the reason and call the tool again. As a fallback, install Chromium manually once:

PLAYWRIGHT_BROWSERS_PATH=~/.config/mattermost-mcp/browsers npx playwright@1.63.0 install chromium --no-shell

When you run this command manually, a framed WARNING: It looks like you are running 'npx playwright install' without first installing your project's dependencies is expected and can be ignored.

If the error mentions an active __dirlock, another Chromium installation is still running, for example started by another client: wait for it and call the tool again. If no installation is running, the file stayed after a crash, and you can remove it with the command from the error text.

[BROWSER_SYSTEM_DEPENDENCIES_MISSING] (Linux): Chromium was downloaded but cannot start without system libraries. Install them once:

sudo npx playwright@1.63.0 install-deps chromium

[BROWSER_SANDBOX_UNAVAILABLE] (Linux): Chromium cannot start its sandbox, for example because unprivileged user namespaces are disabled or the server runs in a container without them. Enable the sandbox for your user if you can. Only if that is not possible, set MATTERMOST_MCP_DISABLE_CHROMIUM_SANDBOX=1 in the env of the MCP server entry and call the tool again.

[LOGIN_WINDOW_CLOSED], [LOGIN_TIMEOUT], [LOGIN_NOT_COMPLETED]: the window was closed, sign-in took longer than 5 minutes, or sign-in in another client ended without a session. Call the tool again to open the window.

[LOGIN_PROFILE_BUSY]: another Chromium window uses the sign-in profile. Close the other Mattermost sign-in window and call the tool again.

[AUTHENTICATION_REQUIRED] in monitoring logs: background monitoring does not open the sign-in window. Call any Mattermost tool to sign in.

[STATE_DIRECTORY_UNSAFE]: ~/.config/mattermost-mcp or one of its subdirectories is a symbolic link, is not a directory or belongs to another user, or ~/.config or your home directory belongs to another user or is writable by group or others. Fix it as the error text says (for example chmod go-w ~/.config) and call the tool again.

[REQUEST_CANCELLED]: the client cancelled the call, for example by its timeout, while the sign-in window was open. The request was not sent, so nothing was posted twice. Sign-in continues in the window, call the tool again after signing in.

License

MIT License

Available Tools

9 tools
mattermost_add_reactionB

Add a reaction emoji to a message

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesThe ID of the message to react to
channel_idYesThe ID of the channel containing the message
emoji_nameYesThe name of the emoji reaction (without colons)

TDQS

B3.1/5.0
Behavior2/5

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

No annotations exist, and the description only states the action without disclosing behavioral traits like side effects (e.g., notifications), idempotency, or permission requirements. Insufficient for a mutation tool.

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 sentence that efficiently conveys the core function without unnecessary words. Could be slightly improved with additional context but is appropriately concise.

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

Completeness2/5

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

Given the tool has three required parameters, no output schema, and no annotations, the description is too minimal. It does not explain return values, confirmation, or constraints like duplicate reactions.

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 no extra meaning beyond the schema, such as what 'emoji_name' format is expected or valid values.

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 verb 'add' and specifies the resource 'reaction emoji to a message', clearly differentiating it from sibling tools like 'mattermost_post_message' which adds a text 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?

No guidance is provided on when to use this tool versus alternatives, such as when to add a reaction versus posting a reply. Lacks any when-not-to-use or prerequisite information.

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

mattermost_get_channel_historyA

Get messages from a Mattermost channel. By default returns ALL messages. Use limit parameter to restrict the number of messages.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (starting from 0). Only used when limit > 0.
limitNoNumber of messages to retrieve. If not specified or 0, returns ALL messages from the channel.
channel_idYesThe ID of the channel
since_dateNoGet messages after this date (ISO 8601 format, e.g., '2025-12-18' or '2025-12-18T10:00:00Z')
before_dateNoGet messages before this date (ISO 8601 format). Use with since_date to get messages for a specific date range (e.g., since_date='2025-12-18', before_date='2025-12-19' for all messages on Dec 18).
after_post_idNoGet messages after this post ID
before_post_idNoGet messages before this post ID

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It mentions that by default all messages are returned and that limit restricts count. However, it does not disclose ordering, whether messages include deleted ones, or any rate limits or auth requirements. For a read operation, this is minimally adequate but lacks richer 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?

The description is two sentences: the first states the core purpose, and the second clarifies default behavior and the limit parameter. Every word is functional, with no redundancy or filler.

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

Completeness3/5

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

Given 7 parameters and no output schema, the description is somewhat sparse. It does not explain pagination behavior (page only used when limit>0 is in schema but not highlighted), nor the maximum results or ordering. It covers the basics but lacks completeness for advanced query scenarios.

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

Parameters4/5

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

The schema covers 100% of parameters with descriptions. The description adds value by explaining the default for limit ('returns ALL messages') and how to use since_date/before_date for date ranges. This reinforces usage tips beyond what the schema provides.

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 verb 'Get' with the resource 'messages from a Mattermost channel.' It clearly states the default behavior (all messages) and mentions the limit parameter. Sibling tools like `mattermost_post_message` and `mattermost_get_thread_replies` are distinct, so there is no ambiguity.

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

Usage Guidelines3/5

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

The description implies usage for retrieving messages but does not explicitly state when to use this tool compared to alternatives like `mattermost_get_thread_replies` for thread replies. No exclusion criteria or conditions are provided, so guidance is implied but not explicit.

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

mattermost_get_thread_repliesA

Get all replies in a message thread

ParametersJSON Schema
NameRequiredDescriptionDefault
post_idYesThe ID of the parent message
channel_idYesThe ID of the channel containing the thread

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It implies a read-only operation ('get'), but does not disclose whether it requires specific permissions, is idempotent, or returns paginated results. Adequate but lacks depth.

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 a single clear sentence with no wasted words. It is front-loaded with the key action and resource.

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

Completeness3/5

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

For a simple retrieval tool with 2 parameters, no output schema, and no annotations, the description is minimally adequate. It does not explain the format of replies, pagination, or limits, leaving some gaps.

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% (both parameters have descriptions). The tool description adds no extra meaning beyond 'get all replies'. Baseline 3 is appropriate as the schema already explains the parameters adequately.

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 'Get all replies in a message thread' uses a specific verb ('get') and resource ('replies'), clearly distinguishing it from sibling tools like 'mattermost_reply_to_thread' (which creates a reply) and 'mattermost_post_message' (which posts a new 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 provides no guidance on when to use this tool vs alternatives, lacks exclusions, and does not mention prerequisites. The sibling tool list is provided but without any comparative context.

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

mattermost_get_user_profileB

Get detailed profile information for a specific user

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe ID of the user

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It only states 'Get detailed profile information' but does not explain what profile fields are included, whether authentication is required, or any side effects. The description is minimal.

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?

A single sentence that directly conveys the tool's purpose without any unnecessary words. It is concise and well-structured.

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

Completeness3/5

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

No output schema exists, but the description does not describe the return format or any limitations. For a simple get operation, this might be sufficient, but more detail (e.g., what fields are returned) would improve completeness.

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 documents the user_id parameter. The description adds no additional meaning 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 verb 'Get' and the resource 'detailed profile information for a specific user'. It distinguishes from sibling tools like mattermost_get_users which lists users, and other tools focused on different actions.

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?

No guidance on when to use this tool versus alternatives. There is no mention that it is for retrieving a single user's full profile, while mattermost_get_users is for listing or searching. The description lacks context about appropriate usage scenarios.

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

mattermost_get_usersB

Get a list of users in the Mattermost workspace with pagination

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (starting from 0)
limitNoMaximum number of users to return (default 100, max 200)

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are present, so the description carries full burden. It mentions pagination but fails to disclose key behaviors like required permissions, sorting, filtering, or response format. The schema already documents pagination parameters, so the description adds minimal value.

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 extremely concise, using a single sentence that clearly states the purpose and key feature (pagination). No superfluous words.

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

Completeness2/5

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

For a list tool with no output schema and no annotations, the description should explain what data is returned (e.g., user IDs, usernames, email). It only mentions pagination, leaving the agent uncertain about the response structure.

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 mentions pagination but does not add extra meaning to the parameters beyond what the schema already provides (e.g., default values, max limit).

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 a list of users in the Mattermost workspace with pagination', specifying the verb (get), resource (list of users), and scope (workspace with pagination). It distinguishes from sibling tools like mattermost_get_user_profile which gets a single user.

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?

No guidance is provided on when to use this tool versus alternatives. Implied usage is for listing users, but no exclusions or conditions are given. There is no mention of when not to use it or any prerequisites.

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

mattermost_list_channelsA

List channels in the Mattermost workspace. By default lists public team channels. Set include_private=true to get all channels including private channels and direct messages (DMs).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (starting from 0)
limitNoMaximum number of channels to return (default 100, max 200)
include_privateNoIf true, returns all channels for the current user including private channels and direct messages. If false (default), returns only public team channels.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses default behavior, pagination via limit/page, and the include_private flag. It does not mention authentication or rate limits, but for a read-only list operation, the transparency is good.

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 two sentences, front-loaded with the main purpose, and contains 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?

For a simple list tool with no output schema, the description covers purpose, default, and key parameter. It could mention the return format briefly, but it is fairly complete given the low 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%, but the description adds meaning beyond the schema by explaining the behavior of include_private (including private channels and DMs) and the default value. This compensates for the schema's dry 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 tool lists channels in the Mattermost workspace, specifying default behavior (public team channels) and the effect of the include_private parameter. It distinguishes from siblings like mattermost_get_channel_history which deals with history of a specific 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 explains when to use include_private versus default, but does not explicitly exclude other use cases or mention alternatives among siblings. However, the context is clear enough for typical use.

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

mattermost_post_messageC

Post a new message to a Mattermost channel

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe message text to post
channel_idYesThe ID of the channel to post to

TDQS

C2.7/5.0
Behavior1/5

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

With no annotations, the description bears full responsibility but only states the obvious. It does not disclose write behavior specifics, potential errors, permissions, or side effects.

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?

A single, direct sentence that efficiently states the tool's purpose. No unnecessary words or redundancy.

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

Completeness2/5

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

Despite the tool's simplicity, the description omits important context such as return value (e.g., message ID), error handling, or any side effects. Given no output schema or annotations, more completeness is expected.

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 adds no extra meaning beyond what the schema already provides for channel_id and message. Baseline score of 3 is appropriate.

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 the action ('post a new message') and the target resource ('Mattermost channel'). It implicitly distinguishes from siblings like 'reply_to_thread' by specifying 'new message', but lacks explicit differentiation.

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?

No guidance is provided on when to use this tool versus alternatives like mattermost_reply_to_thread. There is no mention of prerequisites, limitations, or context.

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

mattermost_reply_to_threadB

Reply to a specific message thread in Mattermost

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe reply text
post_idYesThe ID of the parent message to reply to
channel_idYesThe ID of the channel containing the thread

TDQS

B3.2/5.0
Behavior2/5

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

Without annotations, the description must disclose behavioral traits. It only indicates a write operation ('reply') but does not mention potential failures, rate limits, or any side effects. The agent lacks understanding of what happens on success or failure.

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 a single sentence that efficiently conveys the core purpose. It is appropriately sized with no unnecessary words.

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

Completeness2/5

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

The description does not mention the return value or error handling. For a mutation tool with no output schema, this is a significant gap. The agent needs to know what the tool returns (e.g., reply object or confirmation) to handle the response.

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 descriptions. The tool description adds no additional meaning beyond the schema, 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 (reply) and the resource (specific message thread). It effectively distinguishes from sibling tools like mattermost_post_message (which creates a new message) and mattermost_get_thread_replies (which retrieves replies).

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 provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites such as requiring the post_id to exist in the given channel. No exclusions or context for optimal use are given.

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

mattermost_run_monitoringC

Run the topic monitoring process immediately

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.7/5.0
Behavior1/5

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

No annotations are provided, and the description fails to disclose any behavioral traits such as required permissions, side effects, or what the process entails. The agent receives no information about the tool's impact or safety.

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

Conciseness3/5

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

The description is very short (one sentence) with no wasted words, but it lacks important details. While concise, it could be more informative within the same length, making it not optimally effective.

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

Completeness2/5

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

Given no output schema, no annotations, and zero parameters, the description is the sole source of information. It does not explain what 'topic monitoring process' is, what the outcome looks like, or any prerequisites, leaving the agent underinformed.

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?

There are no parameters, so the schema coverage is 100% by default. The description does not need to add parameter details, and 0 parameters warrants a baseline of 4.

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 uses a specific verb 'Run' and resource 'topic monitoring process', clearly indicating the action and object. It distinguishes from sibling tools like mattermost_post_message or mattermost_get_channel_history, which serve different functions.

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?

No guidance on when to use this tool versus alternatives. There is no mention of prerequisites, context, or when not to use it. The description simply states the action without any usage context.

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.

  1. 9 tool updatesv1.1.2
    • First observedmattermost_add_reaction
    • First observedmattermost_get_channel_history
    • First observedmattermost_get_thread_replies
    • First observedmattermost_get_user_profile
    • First observedmattermost_get_users
    • First observedmattermost_list_channels
    • First observedmattermost_post_message
    • First observedmattermost_reply_to_thread
    • First observedmattermost_run_monitoring

TDQS

A3.6/5.0

Scored across 9 tools

Disambiguation5/5

All tools have clearly distinct purposes: messaging, user info, channels, reactions, and monitoring. No two tools overlap in functionality, making selection unambiguous.

Naming Consistency5/5

All tools follow a consistent pattern of `mattermost_verb_noun` in snake_case, such as `mattermost_post_message` and `mattermost_list_channels`. No mixing of conventions.

Tool Count5/5

9 tools is a well-scoped set for a Mattermost integration, covering essential operations without being overwhelming or sparse.

Completeness4/5

Covers core chat operations (read, post, reply, user info, channels, reactions, monitoring). Minor gaps like message editing or deletion are absent but the surface is mostly complete for typical workflows.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers