MCP server exposing the Mattermost REST API v4 as tools (self-hosted instances).
Server exposes 30 tools with consistent verb_noun naming (get_, create_, update_, delete_, send_, list_, search_). All tools have descriptions (10-50 chars, baseline 194 chars). Input schemas are present with type definitions and parameter descriptions. However, descriptions are uniformly terse (e.g., 'Retrieve a user by ID', 'Send a message to a channel'), lacking context on WHEN to use each tool, dependencies, or recovery guidance. Output schemas are not documented in visible code. Error handling is minimal, no recovery guidance, no categorization of retryable vs fatal errors. Destructive operations (delete_message, delete_channel, delete_file) accept a 'confirm' boolean but lack explicit dry-run or pre-execution warnings in descriptions. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) detected. Pagination is present (page, perPage) but no total count or next_cursor documented. Response field naming is consistent but not validated against parameter naming (e.g., tools accept 'userId' but return field names not visible).
Add a user to a channel
Add an emoji reaction to a message
Create a new channel
Create a direct message channel with a user
Delete a channel
Delete a file
Delete a message
Retrieve a channel by ID
Descriptions are uniformly terse (10-50 chars vs baseline 194 chars). Most lack context on WHEN to use the tool, dependencies, or recovery guidance. E.g., 'Retrieve a user by ID' does not explain when to call get_user vs get_user_by_username vs search_users.
Destructive operations (delete_message, delete_channel, delete_file) accept a 'confirm' boolean but descriptions do not warn of irreversibility or explain the confirmation pattern. No dry-run or pre-execution preview offered.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) detected in tool definitions. LLMs cannot infer which tools are safe to retry, which modify state, or which are read-only without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
Retrieve a channel by name and team
Get members of a channel
Get messages from a channel
Get the current authenticated user
Retrieve a file by ID
Get metadata about a file
Retrieve a message by ID
Retrieve a user by ID
Retrieve a user by email address
Retrieve a user by username
Get the status of a user
List channels in a team
List users with pagination
Remove a user from a channel
Remove an emoji reaction from a message
Search channels by term
Search users by term
Send a message to a channel
Update a channel
Update an existing message
Update a user's status
Upload a file to a channel
Output schemas are not documented in visible code. Pagination tools (list_users, list_channels, get_channel_messages) accept page/perPage but no total count, next_cursor, or result structure documented. LLMs cannot plan multi-page fetches.
No error handling guidance visible. Tools do not document retryable vs fatal errors, recovery steps, or actionable error messages. E.g., 'User not found' should suggest 'Try search_users() with a partial name.'