rocketchat-mcp-server
Provides tools for managing Rocket.Chat channels, messages, threads, direct messages, files, users, and analytics.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rocketchat-mcp-serverlist recent messages in #general"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
rocketchat-mcp-server
A FastMCP (Python) server for Rocket.Chat — 28 tools with AI governance,
observability, and monitoring built in. A ground-up rewrite of the Go server
rocketchat-mcp-go, applying the systematic MCP-server approach in
ADR 0001.
Highlights
28 tools across channels, messages, threads, DMs, files, users, and analytics.
Token economy: message grouping (consecutive same-user merge), compact mode, parallel thread expansion, server-side channel digests.
Governance:
READ_ONLYmode (write tools hidden), per-toolreadOnlyHint/destructiveHintannotations, optional human-in-the-loop approval for consequential writes, structured audit events, and a bearer-token gateway.Observability: structlog JSON logs with secret redaction, per-tool logging middleware,
/metrics(Prometheus), optional OpenTelemetry tracing, and/healthz+/readyz.Security: SSRF host guard + 25 MB cap on downloads, filename escaping on uploads, URL scheme validation, bounded pagination. See the security review.
Related MCP server: Slack MCP Server
Quick start
uv sync --extra dev --extra metrics
export ROCKETCHAT_URL="https://chat.example.com"
export ROCKETCHAT_AUTH_TOKEN="<personal access token>"
export ROCKETCHAT_USER_ID="<user id>"
# HTTP (Streamable) transport on :8000, endpoint /mcp
uv run rocketchat-mcp --mode http
# stdio transport (local MCP clients)
uv run rocketchat-mcp --mode stdioConfiguration
Go-compatible env vars are preserved: ROCKETCHAT_URL, ROCKETCHAT_AUTH_TOKEN,
ROCKETCHAT_USER_ID, READ_ONLY, MCP_PORT. New settings use the RCMCP_
prefix — notably RCMCP_APPROVE_WRITES, RCMCP_GATEWAY_TOKENS
(token:principal,...), RCMCP_READ_ONLY, RCMCP_ENABLE_METRICS,
RCMCP_LOG_JSON. See config.py.
Security note: the HTTP transport should sit behind the bearer-token gateway (
RCMCP_GATEWAY_TOKENS) and TLS termination (Traefik/nginx). The server holds a single Rocket.Chat identity — every authorised caller shares its permission ceiling.
Development
uv run ruff check .
uv run mypy src
uv run pytest -m "not live" # default: respx-mocked, no live server neededLive integration tests
tests/test_live.py exercises the server against a real Rocket.Chat. They
are excluded from the default suite and CI, and only touch a dedicated test
channel (default mcp-test), cleaning up every message they create. The
configured account must be a member of that channel.
RCMCP_LIVE=1 RCMCP_TEST_CHANNEL=mcp-test \
ROCKETCHAT_URL=... ROCKETCHAT_AUTH_TOKEN=... ROCKETCHAT_USER_ID=... \
uv run pytest -m livePin/react tests skip automatically when the account lacks those permissions.
Deployment
Docker / Podman:
Dockerfilebuilds a non-root OCI image. A systemd quadlet unit is indeploy/quadlet/.Release: tag
v*triggers the multi-arch nexus push workflow.
Architecture Decision Records
This server is built to a documented, systematic standard. The design rationale
lives in ADRs under docs/adr/:
ADR 0001 — A systematic approach to building MCP servers — the house standard for architecture, AI governance, observability, and engineering practice that this repository implements.
ADR 0002 — Per-principal upstream identity (multi-tenant) — opt-in per-caller Rocket.Chat credentials so actions are attributable.
New consequential decisions are recorded as additional numbered ADRs.
Documentation
System design — FastMCP adoption design, tool parity, delivery phases.
Bot identity — message alias vs a dedicated bot account, and how to set one up.
Cutover runbook — migrating from the Go server and retiring it.
Architecture Decision Records — see above.
Security review — Snickers / Snyk agent-security findings and their dispositions.
Provenance
A ground-up FastMCP (Python) rewrite of the Go server rocketchat-mcp-go,
applying lessons from openproject-gt-mcp-server (layered architecture,
observability, human-in-the-loop) and redmine-mcp-server (tag-based tool
visibility, {error, hint, code} envelope, secret scrubbing). Tracked under
OpenProject AI and Automation / EPIC #9810.
Available Tools
28 toolsadd_reactionB
Add an emoji reaction to a message (e.g. :thumbsup:).
| Name | Required | Description | Default |
|---|---|---|---|
| emoji | Yes | ||
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-readOnly, non-destructive mutation. The description adds no further behavioral details, such as idempotency, visibility, or permission requirements. It merely restates the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately conveys the action and resource, with a helpful example. No unnecessary words; structurally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description is minimally adequate. However, it omits important contextual details like required permissions or error scenarios, leaving gaps for robust agent reasoning.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description partially compensates by giving an example for the `emoji` parameter (`:thumbsup:`). However, it offers no explanation for `message_id`, which remains ambiguous. Adds some meaning but incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (add) and resource (emoji reaction to a message), with an example (`:thumbsup:`) that reinforces the purpose. No other sibling tool performs a similar function, so it is well-distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, no prerequisites, and no exclusions. It only states what it does, leaving the agent without context for optimal utilization.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_messageCDestructive
Delete a message (needs room_id and message_id). Destructive.
| Name | Required | Description | Default |
|---|---|---|---|
| room_id | Yes | ||
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true. The description's 'Destructive' adds no new information beyond the annotation. No behavioral traits beyond destructiveness are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence that front-loads the purpose. No redundant or extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with an output schema, the description omits return value, permissions, error handling, and any prerequisites. Incomplete for effective agent usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description only repeats parameter names without explaining their meaning or origin. The agent gains no semantic understanding beyond what parameter names imply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'delete' and the resource 'message', making the purpose unambiguous. However, it does not differentiate from sibling tools like edit_message or pin_message, though the verb is sufficiently distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, nor any conditions for appropriate use. Simply lists required parameters without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_fileARead-only
Download a file from the configured Rocket.Chat server.
Returns an image, plain text, or a base64 blob depending on content type. Only fetches from the configured server host (SSRF-guarded, 25 MB cap).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true, and the description adds significant behavioral context: it discloses SSRF protection and a 25 MB cap, which are beyond what annotations offer. There is no contradiction; the tool is indeed a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the core purpose and return types. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one parameter, no output schema), the description covers purpose, return types, and constraints adequately. It does not mention error handling or invalid URLs, but the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate for the lone 'url' parameter. It explains the URL must be from the configured server but does not specify format or how to obtain it (e.g., from list_room_files). This adds some meaning but leaves room for ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'download' and the resource 'file from the configured Rocket.Chat server'. It also specifies return types (image, plain text, base64 blob), distinguishing it from siblings like send_file (upload) and list_room_files (list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for downloading files from the server and mentions constraints (SSRF-guarded, 25 MB cap). However, it does not explicitly state when not to use it or name alternative tools for uploading or listing files, though the context from sibling names provides some differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_messageC
Edit an existing message (needs room_id and message_id).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| room_id | Yes | ||
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, so the description adds little behavioral context beyond 'edit'. It omits whether edits are logged, require special permissions, have time limits, or are reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short (one sentence) but lacks essential details. It does not front-load critical information or earn its place given the complexity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and many siblings, the description misses key context like who can edit, time constraints, and what happens to the original message. It is incomplete for a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fails to explain semantics of any parameter, including the 'text' field. It only lists two parameter names without describing their purpose or format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Edit an existing message', specifying the verb and resource. It implicitly distinguishes from siblings like send_message (new message) and delete_message (removal).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions required parameters (room_id and message_id) but provides no guidance on when to use this tool versus alternatives like sending a new message, limitations (e.g., editing own messages only), or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_digestARead-only
Summarise channel activity over the last N hours (active users, threads, files).
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | ||
| channel | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so description does not need to repeat safety. Description adds that it summarizes activity, which is core behavior, but lacks details on output format or edge cases (empty channel). Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. Front-loaded with verb and resource. Perfectly sized for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity (2 params, read-only) and presence of output schema, description covers main purpose and parameter semantics adequately. Could add more on when to use, but overall sufficient for a simple summarization tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. Description links 'N hours' to 'hours' parameter and 'channel' to the required parameter, but does not explain default values, constraints (e.g., maximum 168), or channel format. Partially clarifies but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Summarise' and identifies resource 'channel activity', specifying included items (active users, threads, files). Distinguishes from sibling tools like get_channel_info or get_channel_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for summarizing recent activity but does not explicitly state when to use versus alternatives (e.g., get_channel_info for metadata, search_messages for detailed search). No when-not or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_infoARead-only
Get details for a channel or private group by name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the readOnlyHint annotation (read-only operation) and adds that the tool works for both channels and private groups. However, it does not disclose additional behavioral traits like authentication requirements, error handling for missing channels, or rate limits. The annotation already covers safety, so the description provides marginal added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler words. Every part is necessary: verb, resource, scope (channel or private group), input method (name or ID). It is concise without sacrificing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description does not need to detail return values. It sufficiently covers the tool's scope (channels and private groups) and input method. However, it lacks information on error cases or whether the tool behaves identically for both resource types. Overall, it is nearly complete for a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% parameter description coverage, but the description clarifies that the 'channel' parameter accepts either a name or an ID. This adds meaningful context beyond the schema's empty description, helping the agent understand the expected input format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves details for a channel or private group by name or ID. It uses a specific verb ('Get') and specifies the resource ('channel or private group'), distinguishing it from sibling tools like get_channel_members or get_channel_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. Among 27 siblings, there is no mention of when to prefer get_channel_info over tools like get_channel_members or get_channel_digest, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_membersCRead-only
List members of a channel or private group.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| offset | No | ||
| channel | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true. The description adds that it covers both channels and private groups, but does not disclose pagination behavior or any other traits 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words, but overly terse. Could benefit from more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks details on return format, pagination support, and how the tool behaves in edge cases (e.g., invalid channel). It is insufficient for a straightforward query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should explain parameters. It does not mention count, offset, or channel, leaving their roles ambiguous even though names hint at pagination.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('list') and resource ('members of a channel or private group'). It distinguishes from siblings like get_channel_info and get_channel_messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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, no exclusions or context about prerequisites (e.g., requiring membership). The description is purely declarative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_messagesBRead-only
Get channel history, newest first.
group merges consecutive same-user messages within 60s (token saver).
expand_threads fetches thread replies. compact truncates to id/user/text/ts.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| group | No | ||
| offset | No | ||
| channel | Yes | ||
| compact | No | ||
| expand_threads | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds behavioral details: newest-first ordering, grouping of consecutive messages within 60s, thread expansion, and truncation to minimal fields. However, it does not disclose pagination behavior or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: three short sentences. The first sentence states the main purpose, and the next two detail key parameters in a structured manner. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values need not be explained. However, the description lacks explanation of pagination parameters (count, offset) which are common in history retrieval. Core functionality is covered, but completeness is moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains three parameters (group, expand_threads, compact) with specific semantics (time window, fetching replies, truncation). But it omits count, offset, and channel, leaving half of the parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets channel history with messages ordered newest first. It identifies the resource (channel messages) and action (get). While it does not explicitly distinguish from siblings like search_messages or get_message_context, the purpose is specific enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives (e.g., search_messages for filtered retrieval). No exclusions or prerequisites are mentioned, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mentionsBRead-only
Get messages that mention the authenticated user in a channel.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| offset | No | ||
| channel | Yes | ||
| compact | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only behavior via readOnlyHint=true. The description adds that it targets mentions for the authenticated user, but lacks details on rate limits, pagination, or required channel membership.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no redundant words. It is efficiently front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and 4 parameters, the description omits details on parameter behavior, pagination, and the structure of the response. It is insufficient for complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any of the four parameters (count, offset, channel, compact). It fails to add meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves messages mentioning the authenticated user in a channel, distinguishing it from siblings like get_channel_messages (all messages) or search_messages (general search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 instead of alternatives such as get_channel_messages or search_messages. The description only states its function, leaving usage context implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_message_contextCRead-only
Get N messages before and after a target message (target flagged is_target).
| Name | Required | Description | Default |
|---|---|---|---|
| after | No | ||
| before | No | ||
| channel | Yes | ||
| compact | No | ||
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description confirms a read operation. However, it fails to disclose behavioral details such as behavior when the target message doesn't exist, limits of before/after parameters, or response structure beyond what an output schema might provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise and front-loaded with the core action. However, it may be too brief for completeness, but it avoids unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description is insufficient for a tool with 5 parameters and many siblings. It lacks context on when to use this tool, how parameters interact, and what distinguishes it from similar tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description only indirectly references the 'before' and 'after' parameters by mentioning 'N messages before and after'. Other parameters (channel, message_id, compact) are not explained. With 0% schema description coverage, the description adds minimal value for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', resource 'messages', and the context 'before and after a target message', making the tool's purpose immediately understandable. It also mentions the target is flagged as is_target, adding specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 get_channel_messages or get_thread_messages. The description does not include any usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pinned_messagesBRead-only
Get pinned messages in a channel.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| offset | No | ||
| channel | Yes | ||
| compact | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide a 'readOnlyHint' of true, indicating a safe read operation. The description adds no further behavioral details (e.g., about pagination, error handling, or permissions), but since annotations already cover the safety profile, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no extraneous information. It is concise and to the point, though it could benefit from slightly expanding on key details without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (which reduces the need to describe return values), the description omits critical context for a retrieval tool: it does not mention pagination behavior (count/offset), the compact flag's effect, or how to handle missing channels. The description is insufficient for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description completely fails to explain the purpose or usage of the four parameters ('channel', 'count', 'offset', 'compact'). It adds no meaning beyond the schema's type names, leaving the agent to guess their roles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and the resource ('pinned messages in a channel'), making the purpose unambiguous. It effectively distinguishes from sibling tools like 'pin_message' and 'unpin_message' as it is a read operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives such as 'get_channel_messages' or 'search_messages'. It lacks any context about prerequisites, filtering, or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_thread_messagesCRead-only
Get the replies in a thread.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| compact | No | ||
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already indicates a safe read operation. The description adds no behavioral detail beyond the verb 'get', failing to disclose whether replies are fetched recursively, pagination behavior, or any rate-limiting considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief (one sentence) and front-loaded, but its brevity comes at the cost of missing critical information. Every sentence should earn its place; this sentence does but is insufficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no parameter descriptions, and a read-only annotation, the description is completely inadequate. It omits output format (despite an output schema existing), parameter semantics, and usage constraints, leaving the agent underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must explain the parameters. It does not: thread_id is implied but unmentioned, and count/compact (including defaults and constraints) are entirely absent, leaving the agent unable to understand how to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get the replies in a thread.' uses a specific verb ('get') and resource ('replies in a thread'), clearly distinguishing it from sibling tools like get_channel_messages or get_message_context, which serve different scopes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 vs. alternatives (e.g., get_message_context, get_channel_messages). There is no mention of prerequisites, when not to use it, or conditions for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unread_channelsARead-only
List channels with unread messages, sorted by unread count descending.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation 'readOnlyHint' already indicates a safe read operation. The description adds valuable behavioral details: listing only channels with unread messages and sorting by unread count descending. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence (9 words) front-loaded with the verb 'List'. Every word is useful, no wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema, the description is adequate. It explains the tool's purpose and sorting, but could mention potential pagination or limits for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. The description does not need to cover parameter semantics as there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource 'channels with unread messages', and the sorting behavior 'by unread count descending'. It distinguishes this tool from siblings like 'list_channels' which lists all channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing channels with unread messages, but does not explicitly state when not to use or suggest alternatives like 'list_channels' for all channels. The context is clear but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_infoARead-only
Get details for a user by username.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a safe read operation. The description does not add further behavioral context such as error handling, data freshness, or rate limits. With annotations covering safety, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the tool's purpose in a concise manner.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no nested objects) and the presence of an output schema, the description is largely sufficient. It could mention that user details are returned, but the output schema handles that. A score of 4 reflects its adequacy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is 0% schema description coverage for the lone parameter (username). The description mentions 'by username' but does not clarify format, case sensitivity, or whether partial matches are allowed. It adds minimal meaning beyond the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and resource 'details for a user', clearly indicating the tool returns user information. It distinguishes from sibling tools like list_users (which lists all users) and get_channel_info (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for looking up a single user by username, but does not explicitly state when to use it over alternatives like list_users. No guidance on prerequisites or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_channelsARead-only
List public channels. Optional query filters by name substring.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| query | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so no destructive behavior. The description adds the filter capability but lacks additional behavioral context like pagination behavior, rate limits, or authorization requirements, which is acceptable given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that gets straight to the point, with no unnecessary words. It is front-loaded with the core purpose and efficiently conveys the key optional filter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters and an output schema, the description lacks details on pagination (count, offset) and the distinction between public and other channel types. While the output schema may document return values, the description should guide usage of all parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description only explains the 'query' parameter (filters by name substring). It does not mention 'count' or 'offset', leaving their semantics unclear. The description partially compensates for the low coverage but is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists public channels, distinguishing it from siblings like list_dms, list_groups, and list_joined_channels. The verb 'list' and resource 'public channels' are specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing public channels but provides no explicit guidance on when to use this tool versus alternatives, such as list_joined_channels or list_groups. There is no mention of when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dmsBRead-only
List direct-message conversations.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to state that. However, it adds no further behavioral context like pagination, ordering, or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, but it is clear and front-loaded. It could be slightly more informative without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 two parameters, the description is too minimal. It does not describe the output format, pagination behavior, or any filters, leaving the agent without crucial context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should explain the parameters. It does not mention count or offset, leaving their semantics entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 'direct-message conversations', clearly distinguishing it from siblings like list_channels, list_groups, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing DMs, but provides no explicit guidance on when to use this tool vs alternatives, nor any disclaimer about limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_groupsARead-only
List private groups the authenticated user belongs to.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description is consistent. The description adds minimal behavioral context beyond the annotation, but it does specify the scope (private groups the user belongs to).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that gets straight to the point with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal but adequate for a simple list tool with an output schema. It covers the basic purpose but lacks details about pagination and expected output format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the pagination parameters 'count' and 'offset' or explain their usage. The schema itself defines them, but the description adds no value for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'private groups the authenticated user belongs to', distinguishing it from siblings like 'list_channels' and 'list_joined_channels'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (to list the user's private groups) but gives no explicit guidance on when not to use it or alternatives for public channels or other group types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_joined_channelsBRead-only
List channels the authenticated user has joined.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds the scope of joined channels but no additional behavioral details (e.g., rate limits, auth requirements, or data freshness).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the key action. However, it sacrifices parameter details that would improve completeness without significant bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of parameters and presence of an output schema, the description is minimally adequate. However, it lacks pagination or output details, and the agent might benefit from more context about when to paginate or what the response contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, meaning parameters are undocumented in both schema and description. The description does not explain 'count' or 'offset', leaving their purpose and usage unclear to the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('channels') and clearly scopes to those joined by the authenticated user, distinguishing it from the sibling 'list_channels' which likely lists all channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not guidance is provided. The scope is implicit but lacks mention of alternatives or conditions like which sibling to prefer, leaving usage ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_room_filesCRead-only
List files shared in a room.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| offset | No | ||
| channel | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the agent knows it's a safe read operation. The description adds no further behavioral details such as pagination behavior, sorting, or access requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (one sentence), but at the cost of omitting important parameter and usage information. It is not well-structured for a tool with three parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (3 parameters, 0% schema coverage), the description is incomplete. It lacks parameter explanations and usage context, though the output schema exists and is not required to be described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the description's single sentence does not explain any parameter (channel, count, offset). The description fails to compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'list', resource 'files', and context 'shared in a room'. It distinguishes this tool from siblings since no other file listing tool exists among the siblings list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It does not mention prerequisites, filtering, or related tools like download_file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersBRead-only
List users. Optional query filters by name substring.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| query | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, so the agent knows it's safe. The description adds that query filters by name substring, but does not disclose pagination behavior via offset/count or default behavior (e.g., whether it lists all users or only a subset). With annotations covering safety, a score of 3 is warranted for the limited additional context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise with two sentences. The first sentence states the core purpose, and the second adds the most important parameter detail. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters and an output schema exists, the description is minimally adequate. It covers the key functionality (listing users with optional name filter) but lacks details on pagination, scope, and what constitutes a 'user list'. The presence of an output schema reduces the need for return value explanation, but behavioral gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only explains the 'query' parameter partially (substring filter). The 'count' and 'offset' parameters are completely undocumented in both schema and description, leaving the agent to infer their meaning from names only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists users and mentions optional query filtering by name substring. However, it does not differentiate from sibling tools like 'get_user_info', which returns a single user, or other list tools. The verb 'list' and resource 'users' are specific, but scope is unclear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 'get_user_info' or other list tools. There is no mention of prerequisites, context (e.g., workspace vs. system users), or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_as_readBIdempotent
Mark all messages in a channel as read (clears the unread counter).
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, indicating safe repeated calls. The description adds 'clears the unread counter,' which is a useful behavioral detail not captured in annotations. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence of 10 words, front-loaded with the core action. Every word earns its place. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic purpose and effect, but lacks details on parameter formatting and return value. An output schema exists, which may document return values, but the description does not reference it. For a simple tool, it meets minimum viability but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (no description for the 'channel' parameter). The tool description does not explain what the channel parameter expects (e.g., ID, name) or provide format hints. This is a significant gap for a single-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: mark all messages in a channel as read, and adds the effect of clearing the unread counter. It specifies the resource (channel) and verb (mark as read), distinguishing it from sibling tools like get_unread_channels or send_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description does not mention prerequisites, suitable contexts, or when not to use it. Sibling tools exist (e.g., get_unread_channels, get_channel_info) but no comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pin_messageC
Pin a message.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it is not read-only and not destructive, but the description adds no behavioral context beyond that. It does not mention potential side effects, required permissions, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (3 words), but it sacrifices necessary detail. It does not earn its place as it fails to inform the agent adequately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite low complexity and an output schema, the description lacks essential context: prerequisites, return value, and effect on the system. It is incomplete for effective tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'message_id', has no description in the schema or the tool description. The description adds no meaning beyond its name and type, leaving the agent to infer its purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Pin a message.' clearly states the action and resource, and it distinguishes from sibling tools like 'unpin_message' and 'get_pinned_messages'. However, it lacks any elaboration on scope or effects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., 'unpin_message'), nor are there any prerequisites or context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_threadA
Reply into a thread. channel is auto-resolved from the parent if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| channel | No | ||
| thread_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate the tool is mutable but not destructive. The description adds one behavioral detail (auto-resolution of channel) which is useful. However, it does not disclose potential side effects like notifications or permissions, and annotations already cover the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, no fluff. The key information is front-loaded: the purpose and a crucial parameter hint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with low complexity (3 params, no nested objects, output schema exists), the description is adequate but minimal. It covers the essential purpose and one parameter behavior, but could mention thread context or output expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only explains the 'channel' parameter's auto-resolution. The 'text' and 'thread_id' parameters are left without explanation. Given the low coverage, the description adds minimal semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Reply') and resource ('into a thread'). It distinguishes from sibling tools like 'send_message' by focusing on thread replies and mentions auto-resolution of channel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a useful hint about channel auto-resolution but does not explicitly guide when to use this tool over alternatives like 'send_message' or 'get_thread_messages'. With 27 siblings, more explicit guidance would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_messagesCRead-only
Search for text within a channel.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| channel | Yes | ||
| compact | No | ||
| search_text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, which is consistent with a search operation. The description adds no further behavioral details (e.g., pagination, rate limits, result format), but the lack of additional context is acceptable given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise at one sentence with no wasted words. However, it could be restructured to front-load more critical information, such as required parameters or distinct behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description omits essential context about parameters and return value structure. With four parameters and zero schema descriptions, the agent lacks sufficient information to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for its properties, and the high-level description does not explain individual parameters. For example, 'compact' and 'count' are not defined, leaving the agent to guess their meaning from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'search' and the resource 'text within a channel', making the tool's purpose understandable. However, it does not distinguish from sibling tools like 'get_message_context' or 'get_mentions', which could cause confusion for an AI agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 such as 'get_message_context' or 'get_channel_messages'. There is no mention of prerequisites, exclusions, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_dmA
Send a direct message to a user (creates the DM room if needed).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| username | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it's not read-only (write) and not destructive, so the description adds the key behavioral detail that the DM room is created automatically if it doesn't exist. This goes 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no waste. However, it could include parameter details without significantly increasing length. It is efficient but not perfectly structured for maximum utility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 the essential behavior but lacks parameter details. For a simple tool, it is minimally complete but leaves ambiguity about parameter inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the tool description must compensate but provides no explanation for the two parameters (username, text). The agent cannot infer meaning constraints (e.g., user existence, text length or formatting) from the description alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Send a direct message to a user', which is a specific verb-resource combination. It distinguishes from siblings like send_message (channel) and reply_to_thread by focusing on DM, and adds the nuance of auto-creating the room.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description hints at when to use by noting it creates the DM room if needed, implying it's the primary DM tool. However, it does not explicitly mention when to avoid it (e.g., for existing channels or threads) or compare with alternatives like send_message.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_fileB
Upload a base64-encoded file to a room.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | Yes | ||
| content | Yes | ||
| message | No | ||
| filename | Yes | ||
| mime_type | No | application/octet-stream |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, destructiveHint=false, consistent with upload. However, no additional behavioral details (e.g., file size limits, overwrite behavior, authentication requirements) beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundancy, efficiently communicates the core action. Every word is necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters with no schema descriptions and an output schema present but not described, the description is too minimal. It does not address return values, error cases, or complementary tools like 'download_file'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 5 parameters. The description only implies 'content' is base64-encoded, leaving 'channel', 'filename', 'message', and 'mime_type' unexplained. Insufficient compensation for low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Upload') and the resource ('a base64-encoded file to a room'). It distinguishes from sibling tools like 'download_file' and 'send_message'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. Siblings include 'send_message', 'download_file', etc., but no explicit context for selection or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageC
Post a message to a channel or group.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| channel | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is not read-only and not destructive. The description adds no additional behavioral context such as permission requirements, rate limits, or confirmation steps. It merely restates the action implied by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single 7-word sentence, which is concise but severely underspecified. It lacks necessary details, making it too minimal to be useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 is still incomplete. It lacks parameter descriptions, usage guidance, and any behavioral context, leaving the agent with insufficient information to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not explain the parameters 'channel' or 'text' beyond their names. Schema coverage is 0%, so the description should compensate, but it fails to clarify whether channel is an ID or name, or what format text supports (plain text, markdown, etc.).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Post a message to a channel or group' clearly states the action (post) and target (message to channel or group). It partially distinguishes from sibling tools like send_dm (direct message) and reply_to_thread, but does not explicitly differentiate them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. The description does not indicate when to use this tool versus alternatives like send_dm, reply_to_thread, or edit_message. No prerequisites or context are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpin_messageC
Unpin a message.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it's a non-destructive write operation ('readOnlyHint': false, 'destructiveHint': false). The description adds minimal context beyond the action itself, but does not disclose side effects or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise at one short sentence. No redundant words, but could be slightly expanded without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 (not shown) and simple scope, the description is minimally adequate. However, it lacks context about the effect (e.g., removes from pinned messages) and error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the only parameter 'message_id'. The tool description provides no details about what 'message_id' is or its expected format, leaving the agent with insufficient information to use it correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Unpin a message' clearly states the action and resource. It is specific and distinct from siblings like 'delete_message' or 'pin_message', though it could further differentiate by emphasizing it only affects pin status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., 'delete_message' or 'pin_message'). No mention of prerequisites like the message must be pinned or required permissions.
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.
28 tool updates
v0.1.0- First observed
add_reaction - First observed
delete_message - First observed
download_file - First observed
edit_message - First observed
get_channel_digest - First observed
get_channel_info - First observed
get_channel_members - First observed
get_channel_messages - First observed
get_mentions - First observed
get_message_context - First observed
get_pinned_messages - First observed
get_thread_messages - First observed
get_unread_channels - First observed
get_user_info - First observed
list_channels - First observed
list_dms - First observed
list_groups - First observed
list_joined_channels - First observed
list_room_files - First observed
list_users - First observed
mark_as_read - First observed
pin_message - First observed
reply_to_thread - First observed
search_messages - First observed
send_dm - First observed
send_file - First observed
send_message - First observed
unpin_message
TDQS
Each tool targets a distinct action or resource, with clear separation between message operations, channel queries, user info, and file handling. Even similar tools like get_channel_messages and search_messages have different intents, and descriptions prevent confusion.
All tool names follow a consistent verb_noun pattern in snake_case, such as add_reaction, delete_message, list_channels, and send_dm. The only minor variation is reply_to_thread, which still adheres to the same convention.
28 tools is above the typical 5-15 range for MCP servers, but the coverage of Rocket.Chat operations (messages, channels, users, files, etc.) justifies the count. It's borderline heavy but not excessive.
The toolset covers core messaging, channel reading, and user lookups, but lacks room creation/deletion (e.g., create_channel, delete_room) and administrative actions. This creates noticeable gaps for automation of the full lifecycle.
Maintenance
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
MCP server for Sendbird — chat users, channels, members, and messages from your AI client.
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceA production-ready MCP server built with FastAPI, providing an enhanced tool registry for creating, managing, and documenting AI tools for Large Language Models (LLMs).34-
- FlicenseNot gradedqualityDmaintenanceA comprehensive Slack integration server that enables sending messages, managing channels, uploading files, and running Pomodoro timers through FastMCP v2.2-
- FlicenseNot gradedqualityDmaintenanceEnables AI agents and LLMs to interact with the ICON MCP v104 API through standardized tools. The server is built on FastMCP for efficient async handling and includes Docker support for easy deployment.-
- FlicenseNot gradedqualityDmaintenanceMCP server for Rocket.Chat, enabling AI agents to interact with Rocket.Chat workspaces via tools like listing users, sending messages, and managing channels.2-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/GavinTomlins/rocketchat-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server